Vai al contenuto

Codici di stato HTTP

Una risposta HTTP inizia con un codice a tre cifre e una breve frase di motivo. La prima cifra è il riepilogo completo: 1xx è provvisorio, 2xx è riuscito, 3xx punta da qualche altra parte, 4xx incolpa la richiesta, 5xx incolpa il server. Se ricordi solo quello, puoi leggere un log che non hai mai visto prima.

Le frasi di motivo qui sono quelle dalle RFC, in inglese, perché è quello che viaggia sul filo — un server invia "Not Found", non una traduzione di esso, e una frase che stai cercando in un log deve corrispondere ai byte che sono stati effettivamente inviati.

Le distinzioni che causano veri problemi sono all'interno delle classi piuttosto che tra di esse: 401 rispetto a 403, 301 rispetto a 308, e 502 rispetto a 503 rispondono ciascuno a una domanda diversa su cosa fare dopo, e ognuno è abitualmente usato per l'altro.

1xx — Informativo

3

Provvisorio: la risposta non è definitiva e ne segue un'altra.

CodiceFrase di motivoChe cosa significa
100ContinueIntestazioni ricevute, continua a inviare il corpo.
101Switching ProtocolsCommutazione di protocolli — l'handshake WebSocket.
103Early HintsSuggerimenti iniziali: precarica queste risorse mentre la risposta reale viene preparata.

2xx — Successo

5

La richiesta è stata ricevuta, compresa e accettata.

CodiceFrase di motivoChe cosa significa
200OKSuccesso, con un corpo.
201CreatedCreato.Dovrebbe portare un'intestazione Location che punta alla nuova risorsa.
202AcceptedAccettato per l'elaborazione, che non è ancora accaduta.
204No ContentSuccesso, e deliberatamente nessun corpo.La risposta giusta a un DELETE, o a un salvataggio che non ha nulla da restituire.
206Partial ContentIl contenuto parziale — la risposta a una richiesta Range. Download riprendibili.

3xx — Reindirizzamento

6

La risorsa è altrove, o la tua copia memorizzata è ancora buona.

CodiceFrase di motivoChe cosa significa
301Moved PermanentlySpostato permanentemente. Aggiorna i tuoi link; le cache potrebbero mantenere questo per sempre.
302FoundTrovato — un reindirizzamento temporaneo.Ampiamente implementato come cambio del metodo a GET, che 307 risolve.
303See OtherVedi altro: recupera il risultato con GET. Il reindirizzamento dopo un POST di modulo.
304Not ModifiedNon modificato — la tua copia memorizzata è attuale. Inviato senza corpo.
307Temporary RedirectReindirizzamento temporaneo, metodo e corpo preservati.
308Permanent RedirectReindirizzamento permanente, metodo e corpo preservati.

4xx — Errore del client

14

La richiesta è il problema. Ripeterla invariata fallerà di nuovo.

CodiceFrase di motivoChe cosa significa
400Bad RequestIl server non poteva analizzare affatto la richiesta.
401UnauthorizedNon autenticato — il server non sa chi sei.Denominato Unauthorized, ma significa non autenticato. Dovrebbe includere WWW-Authenticate.
403ForbiddenAutenticato e ancora non consentito. Credenziali migliori non aiuteranno.
404Not FoundNessuna risorsa di questo tipo, e il server non dirà se ce n'è mai stata una.
405Method Not AllowedMetodo sbagliato per questo URL.Deve elencare quelli che funzionano in un'intestazione Allow.
406Not AcceptableNulla disponibile in un formato che la tua intestazione Accept accetterà.
409ConflictEntra in conflitto con lo stato attuale — una modifica rispetto a una versione non aggiornata.
410GoneSparito: è esistito ed è stato deliberatamente rimosso. Più forte di 404.
413Content Too LargeIl corpo è più grande di quanto il server accetti.
415Unsupported Media TypeIl server non gestisce questo Content-Type.
418I'm a teapotSono una teiera. Uno scherzo di April Fools del 1998, permanentemente riservato.
422Unprocessable ContentAnalizzato correttamente, i contenuti non validi — un campo mancante, un valore cattivo.
429Too Many RequestsLimitato di tasso.Cerca Retry-After prima di riprovare, e rallenta esponenzialmente.
451Unavailable For Legal ReasonsBloccato per motivi legali. Il numero è un riferimento a Fahrenheit 451.

5xx — Errore del server

6

La richiesta potrebbe andare bene. Questi sono quelli che vale la pena riprovare.

CodiceFrase di motivoChe cosa significa
500Internal Server ErrorUn errore non gestito sul server. Nulla da risolvere dalla tua parte.
501Not ImplementedIl server non implementa affatto questo metodo.
502Bad GatewayUn proxy ha raggiunto il server upstream e ha ottenuto qualcosa di inutilizzabile in cambio.
503Service UnavailableDeliberatamente non servendo — sovraccarico o in manutenzione.Lo stato che dovrebbe portare Retry-After.
504Gateway TimeoutUn proxy ha rinunciato ad aspettare il server upstream.
505HTTP Version Not SupportedLa versione HTTP nella richiesta non è supportata.

FAQ

Qual è la differenza tra 401 e 403?
401 Unauthorized significa che la richiesta non è stata autenticata — il server non sa chi sei, e un 401 corretto include un'intestazione WWW-Authenticate che ti dice come provarlo. 403 Forbidden significa che sa esattamente chi sei e ancora non puoi avere questo. Ritentare un 403 con credenziali migliori per la stessa identità non aiuterà.
Dovrei usare 301 o 308 per un reindirizzamento?
308 se il metodo è importante. Storicamente 301 e 302 sono stati ampiamente implementati come "reindirizzamento e passa a GET", che trasforma silenziosamente un POST in un GET. 307 e 308 sono stati introdotti per promettere che il metodo e il corpo sono preservati. Per uno spostamento permanente di una pagina che viene recuperata solo, 301 rimane la scelta più comprensibile.
Cosa significa 422 che 400 non?
400 Bad Request significa che il server non poteva comprendere affatto la richiesta — JSON malformato, un'intestazione rotta. 422 Unprocessable Content significa che è stata analizzata bene e i contenuti sono comunque sbagliati: un corpo ben formato con un campo obbligatorio mancante o una data nel passato. La divisione è utile proprio perché la correzione del client è diversa in ogni caso.
È 418 un vero codice di stato?
È reale in quanto è registrato e ogni libreria HTTP lo conosce, ed è uno scherzo in quanto proviene dal Hyper Text Coffee Pot Control Protocol del 1998 April Fools'. I tentativi di reclamare il numero per un uso pratico sono stati rifiutati, quindi è permanentemente riservato ai teiere.
Perché 503 è diverso da 502?
502 Bad Gateway significa che un proxy ha raggiunto il server upstream e ha ottenuto qualcosa di inutilizzabile in cambio. 503 Service Unavailable significa che il server stesso deliberatamente non sta servendo in questo momento — sovraccarico, o in manutenzione — ed è quello che dovrebbe portare un'intestazione Retry-After, perché è quello che dovrebbe recuperare.