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.

Tabella dei codici di stato HTTP
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-After e 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

Entrambi segnalano che qualcosa non è stato trovato, ma il 404 è un generico «non reperito» che comprende anche le assenze temporanee, mentre il 410 è un segnale forte che dichiara l'eliminazione permanente. Per i contenuti rimossi di proposito, il 410 comunica meglio l'intenzione anche ai fini del posizionamento nei motori di ricerca.

Il 301, permanente, trasferisce al nuovo indirizzo quasi per intero la valutazione del vecchio. Con il 302, temporaneo, i motori di ricerca continuano a considerare canonico il vecchio indirizzo: per gli spostamenti definitivi si deve quindi usare sempre il 301.

Il 401, «non autorizzato», indica che l'identità non è stata dimostrata, cioè che manca l'autenticazione; il 403, «vietato», indica che l'autenticazione è avvenuta ma mancano i permessi. Malgrado il nome, il 401 riguarda l'autenticazione e il 403 l'autorizzazione.

Il 502 indica che un servente intermediario inverso o un ripartitore di carico non ha ricevuto una risposta valida dal servente applicativo retrostante. Verificate anzitutto che il processo di quel servente sia in esecuzione e non si sia interrotto.

Nella scheda della rete degli strumenti per sviluppatori del navigatore, con l'opzione -i del comando curl, oppure inserendo il numero nella funzione di ricerca di questo strumento per conoscerne il significato.
Tool-kun

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.