Elenco dei codici di stato HTTP
Tutti i codici di stato HTTP, dalla serie 1xx alla 5xx, in un unico elenco. Un riferimento per sviluppatori che ne illustra significato, cause più frequenti e rimedi, con una ricerca dettagliata per numero di codice.
| Codice | Nome | Significato | Cause più frequenti |
|---|---|---|---|
| 1xx — Risposte informative | |||
| 100 | Continue (Continua) | Indica che la prima parte della richiesta è stata accettata e che il cliente può inviare il resto. | Si riceve quando, prima di inviare un corpo voluminoso, si aggiunge l'intestazione Expect: 100-continue. |
| 101 | Switching Protocols (Cambio di protocollo) | Indica che il servente accoglie la richiesta dell'intestazione Upgrade e passa a un altro protocollo. | Risposta normale che si osserva all'apertura di una connessione WebSocket. |
| 102 | Processing (Elaborazione in corso) | Indica che il servente ha accettato la richiesta e la sta elaborando, ma non ha ancora pronta una risposta; appartiene a WebDAV. | Viene inviata nelle operazioni WebDAV lunghe per evitare che scada il tempo. |
| 103 | Early Hints (Suggerimenti anticipati) | Anticipa, prima della risposta definitiva, intestazioni come Link, permettendo il precaricamento delle risorse. | Le reti di distribuzione dei contenuti e i serventi intermediari inversi la aggiungono per accelerare il precaricamento di fogli di stile e script. |
| 2xx — Successo | |||
| 200 | OK (Successo) | Indica che la richiesta è stata elaborata correttamente: è la risposta di successo più comune. | |
| 201 | Created (Creato) | Indica che in esito alla richiesta è stata creata una nuova risorsa. | La restituiscono le interfacce che creano risorse con il metodo POST. È consuetudine indicarne l'indirizzo nell'intestazione Location. |
| 202 | Accepted (Accettato) | Indica che la richiesta è stata accettata ma l'elaborazione non è ancora conclusa: è il caso dell'elaborazione asincrona. | Si usa nelle interfacce asincrone che si limitano ad accodare il lavoro e nei punti di accesso che raccolgono elaborazioni differite. |
| 204 | No Content (Nessun contenuto) | Indica che l'operazione è riuscita ma non c'è alcun corpo da restituire. | Si impiega alla riuscita di una cancellazione oppure nelle interfacce che, dopo un aggiornamento con PUT, non restituiscono alcun contenuto. |
| 206 | Partial Content (Contenuto parziale) | Indica che, in risposta all'intestazione Range del cliente, è stata restituita soltanto una parte della risorsa. | Risposta normale nella riproduzione di filmati con avanzamento rapido e nella ripresa di uno scaricamento interrotto. |
| 3xx — Reindirizzamento | |||
| 301 | Moved Permanently (Spostato in modo permanente) | Indica che la risorsa si è spostata in modo permanente a un nuovo indirizzo. I motori di ricerca trasferiscono la valutazione al nuovo indirizzo. | Si usa per reindirizzare dai vecchi indirizzi quando si modifica la struttura degli indirizzi o si migra a un dominio proprio. |
| 302 | Found (Trovato temporaneamente) | Indica che la risorsa si trova temporaneamente a un altro indirizzo. Per gli spostamenti definitivi si deve usare il 301. | Si usa spesso per gli smistamenti provvisori durante la manutenzione e per il reindirizzamento successivo all'accesso. |
| 303 | See Other (Vedi altrove) | Indica che l'esito dell'elaborazione va recuperato con un GET a un altro indirizzo: è lo schema POST-reindirizzamento-GET. | Si usa dopo l'invio di un modulo con POST per evitare la finestra di reinvio del navigatore. |
| 304 | Not Modified (Non modificato) | Indica che la risorsa in cache non è cambiata e che il corpo non viene ritrasmesso. | Si riceve nelle richieste condizionali con If-None-Match o If-Modified-Since quando la cache è ancora valida. |
| 307 | Temporary Redirect (Reindirizzamento temporaneo) | Reindirizzamento temporaneo che, a differenza del 302, ripete la richiesta senza modificarne metodo e corpo. | Si usa nelle interfacce che devono reindirizzare conservando il corpo di una richiesta POST o PUT. |
| 308 | Permanent Redirect (Reindirizzamento permanente) | Reindirizzamento permanente che, a differenza del 301, ripete la richiesta senza modificarne metodo e corpo. | Si usa quando si vuole uno spostamento definitivo conservando il metodo, per esempio nel passaggio a una nuova versione di un'interfaccia. |
| 4xx — Errori del cliente | |||
| 400 | Bad Request (Richiesta non valida) | Indica che la sintassi o i parametri della richiesta non sono validi e il servente non riesce a interpretarla. | Errore di sintassi nel JSON, parametro obbligatorio mancante o tipo di dato non corrispondente. |
| 401 | Unauthorized (Errore di autenticazione) | Indica l'assenza o l'invalidità delle credenziali: in realtà significa «non autenticato». | Gettone scaduto, intestazione Authorization non inviata o chiave dell'interfaccia errata. |
| 402 | Payment Required (Pagamento richiesto) | Stato riservato a usi futuri, talvolta impiegato quando è richiesto un pagamento. | Alcune interfacce lo usano a modo proprio per segnalare il superamento dei limiti d'uso o la scadenza di un piano a pagamento. |
| 403 | Forbidden (Vietato) | Indica che il servente ha compreso la richiesta ma la rifiuta per mancanza di autorizzazioni. | Permessi insufficienti, restrizioni per indirizzo IP, violazione delle regole sulla condivisione fra origini diverse o permessi errati sui file. |
| 404 | Not Found (Non trovato) | Indica che la risorsa richiesta non è stata trovata. | Percorso non registrato, errore di digitazione nell'indirizzo o accesso a una risorsa già eliminata. |
| 405 | Method Not Allowed (Metodo non consentito) | Indica che la risorsa esiste ma il metodo HTTP indicato non è consentito. | Tipicamente uno scambio di metodo, come l'invio di un POST a un punto di accesso che ammette solo GET. |
| 406 | Not Acceptable (Non accettabile) | Indica che il servente non può fornire il formato richiesto dall'intestazione Accept del cliente. | Si verifica, per esempio, quando si indica Accept: application/xml a un'interfaccia che restituisce soltanto JSON. |
| 408 | Request Timeout (Tempo della richiesta scaduto) | Indica che il tempo a disposizione del servente è scaduto mentre attendeva il completamento della richiesta del cliente. | Collegamento lento, caricamento di file enormi o blocco dell'elaborazione dal lato del cliente. |
| 409 | Conflict (Conflitto) | Indica che la richiesta è in conflitto con lo stato attuale della risorsa. | Fallimento di un blocco ottimistico per modifiche simultanee oppure tentativo di creare un duplicato. |
| 410 | Gone (Non più disponibile) | Indica che la risorsa è stata eliminata in modo permanente e non esisterà più: è un segnale più forte del 404. | Si usa per dichiarare ai motori di ricerca che il contenuto è stato eliminato o dismesso di proposito. |
| 413 | Payload Too Large (Contenuto troppo grande) | Indica che il corpo della richiesta supera la dimensione ammessa dal servente. | Superamento del limite per il caricamento dei file oppure limiti di dimensione troppo stretti nella configurazione di Nginx o di PHP. |
| 414 | URI Too Long (Indirizzo troppo lungo) | Indica che l'indirizzo della richiesta supera la lunghezza che il servente può gestire. | Si verifica facilmente quando si stipano molti dati nei parametri di interrogazione di una richiesta GET. |
| 415 | Unsupported Media Type (Tipo di supporto non gestito) | Indica che il servente non gestisce il tipo di contenuto indicato per il corpo della richiesta. | Spesso un errore nell'impostazione dell'intestazione, per esempio l'invio con Content-Type: text/plain a un'interfaccia JSON. |
| 422 | Unprocessable Entity (Contenuto non elaborabile) | Indica che la sintassi è corretta ma la convalida semantica non è stata superata. | Si usa di frequente per restituire gli errori di convalida di un modulo: campi obbligatori mancanti o formati errati. |
| 425 | Too Early (Troppo presto) | Indica che il servente rifiuta di elaborare la richiesta contenuta nei dati anticipati per il rischio di attacchi con riproposizione. | Può essere restituito come contromisura agli attacchi di ripetizione che sfruttano i dati a viaggio zero di TLS 1.3. |
| 429 | Too Many Requests (Troppe richieste) | Indica che il numero di richieste in un dato intervallo ha superato il limite di frequenza. | Superamento del limite di frequenza dell'interfaccia. L'intestazione Retry-After indica spesso quanto attendere prima di riprovare. |
| 451 | Unavailable For Legal Reasons (Non disponibile per motivi legali) | Indica che l'accesso al contenuto è vietato per un'imposizione legale, per esempio un provvedimento dell'autorità giudiziaria. | Si riceve quando il fornitore del contenuto ne blocca l'accesso a seguito di una segnalazione per violazione del diritto d'autore o di una normativa nazionale. |
| 5xx — Errori del servente | |||
| 500 | Internal Server Error (Errore interno del servente) | Indica che sul servente si è verificato un errore imprevisto e la richiesta non è stata elaborata. | Le cause sono le più varie: eccezione non gestita dall'applicazione, errore di configurazione, connessione alla base di dati fallita. |
| 501 | Not Implemented (Non implementato) | Indica che il servente non gestisce il metodo richiesto. | Si verifica inviando a un'implementazione datata un metodo HTTP non previsto, per esempio PATCH. |
| 502 | Bad Gateway (Passerella non valida) | Indica che un servente intermediario o una passerella ha ricevuto una risposta non valida dal servente a monte. | Tipicamente l'arresto o il blocco improvviso del servente applicativo a monte. |
| 503 | Service Unavailable (Servizio non disponibile) | Indica che il servente è temporaneamente sovraccarico o in manutenzione e non può elaborare la richiesta. | Esaurimento delle risorse per carico elevato oppure sospensione temporanea per manutenzione programmata. |
| 504 | Gateway Timeout (Tempo della passerella scaduto) | Indica che un servente intermediario o una passerella non ha ricevuto in tempo la risposta dal servente a monte. | Elaborazione troppo lunga nella parte interna del sistema, latenza di rete o blocco del servente a monte. |
| 505 | HTTP Version Not Supported (Versione HTTP non gestita) | Indica che il servente non gestisce la versione di HTTP usata nella richiesta. | Si verifica quando un cliente datato o un intermediario mal configurato comunica con una versione di HTTP inattesa. |
| 507 | Insufficient Storage (Spazio di archiviazione insufficiente) | Indica che il servente non dispone di spazio di archiviazione sufficiente per completare la richiesta; appartiene a WebDAV. | Si riceve quando le operazioni di salvataggio dei file falliscono per mancanza di spazio su disco. |
| 508 | Loop Detected (Ciclo rilevato) | Indica che durante l'elaborazione della richiesta è stato rilevato un ciclo infinito; appartiene a WebDAV. | Si verifica in presenza di riferimenti circolari nelle associazioni di WebDAV. |
| 511 | Network Authentication Required (Autenticazione di rete richiesta) | Indica che il cliente deve autenticarsi per ottenere l'accesso alla rete. | Si usa per reindirizzare al portale di accesso delle reti senza fili pubbliche. |
Consigli
- Il 404 e il 410 si somigliano, ma il 410 dichiara che il contenuto è stato eliminato di proposito e non tornerà. Per i contenuti privi di una destinazione di reindirizzamento, il 410 rende più chiara l'intenzione ai motori di ricerca.
- Il 301 e il 308, come il 302 e il 307, condividono il carattere permanente o temporaneo, ma il 308 e il 307 si distinguono perché ripetono la richiesta conservando il corpo di un POST.
- Ricevuto un 429, cioè «troppe richieste», la buona educazione vuole che si legga il numero di secondi nell'intestazione
Retry-Aftere si attenda prima di riprovare. Ignorarlo e insistere può portare a un blocco. - Gli errori della serie 5xx indicano un problema del servente e non un difetto del cliente: prima ancora del contenuto della vostra richiesta, verificate quindi lo stato di funzionamento del servente e i suoi registri.
- Nella scheda della rete degli strumenti per sviluppatori del navigatore i codici di stato di ciascuna richiesta compaiono con colori diversi: usarla insieme a questo strumento rende la messa a punto più spedita.
Domande frequenti
-i del comando curl, oppure inserendo il numero nella funzione di ricerca di questo strumento per conoscerne il significato.
A proposito — storia dei codici di stato HTTP
L'ordinamento dei codici di stato HTTP fu standardizzato per la prima volta nel 1996, nella specifica di HTTP/1.0, la norma RFC 1945. Con HTTP/1.1, cioè la RFC 2616 del 1999, si consolidò quasi del tutto l'attuale sistema, comprese le serie 4xx e 5xx, poi ripreso dalla RFC 7231 del 2014 e dalla RFC 9110 del 2022.
È celebre il codice scherzoso 418, «sono una teiera», che deriva da una specifica burlesca pubblicata per il primo aprile del 1998: un protocollo immaginario per il controllo delle caffettiere. Nella finzione, quel codice veniva restituito quando si chiedeva a una teiera di preparare il caffè.
L'idea di far esprimere alla prima cifra la grande categoria di significato avrebbe influenzato, si dice, i codici di risposta delle reti telefoniche e più tardi anche quelli di SMTP e FTP. La semplicità di quella classificazione — 1xx per le informazioni, 2xx per il successo — è rimasta pressoché intatta anche dopo quasi trent'anni.
Il 451, «non disponibile per motivi legali», è un codice relativamente recente, standardizzato nel 2015 dalla RFC 7725. Il numero fu scelto come omaggio a «Fahrenheit 451», il romanzo di fantascienza di Ray Bradbury dedicato al tema della censura.