Codici di stato HTTP: guida di riferimento
Ogni risposta HTTP inizia con un codice di stato a tre cifre, spesso chiamato semplicemente “codice HTTP”, che indica al client com’è andata la richiesta. Sfoglia i codici per classe: per ognuno trovi una spiegazione chiara, un esempio di risposta e cosa comporta per i reindirizzamenti e la SEO.
1xx Informazione
La richiesta è stata ricevuta e l’elaborazione prosegue. Queste risposte provvisorie arrivano prima della risposta definitiva e non concludono mai una catena di reindirizzamenti.
- 100
Continue
Risposta provvisoria: il server ha accettato le intestazioni della richiesta e il client, che ha inviato “Expect: 100-continue”, può ora inviare il corpo. - 101
Switching Protocols
Il server accetta la richiesta Upgrade del client e passa a un altro protocollo su questa connessione: in pratica si tratta quasi sempre di WebSocket. - 102
Processing
Risposta provvisoria WebDAV ormai obsoleta: comunica al client che il server sta ancora lavorando a una richiesta lunga e che deve continuare ad attendere. - 103
Early Hints
Risposta provvisoria che invia intestazioni Link prima di quella definitiva: il browser può precaricare risorse o connettersi mentre il server lavora.
2xx Successo
La richiesta è stata ricevuta, compresa e accettata. Una catena di reindirizzamenti ben configurata termina con uno di questi codici, di solito 200 OK.
- 200
OK
La richiesta è riuscita; per un GET il corpo contiene la risorsa richiesta. Ogni catena di reindirizzamenti dovrebbe terminare su un URL che restituisce 200. - 201
Created
La richiesta è riuscita e ha creato una nuova risorsa, di solito dopo un POST o un PUT. L’intestazione Location, se presente, punta alla nuova risorsa. - 202
Accepted
La richiesta è stata accettata per l’elaborazione ma non è ancora completata. Si usa per i job asincroni; l’esito finale non è garantito. - 203
Non-Authoritative Information
La richiesta è riuscita, ma un proxy di trasformazione ha modificato la risposta, quindi il contenuto non è esattamente quello inviato dal server di origine. - 204
No Content
La richiesta è riuscita e non c’è contenuto da inviare. Il browser resta sulla pagina corrente; è tipico di DELETE, beacon e preflight CORS. - 205
Reset Content
La richiesta è riuscita e il client dovrebbe reimpostare la vista del documento, per esempio svuotare il modulo appena inviato. - 206
Partial Content
Il server invia solo gli intervalli di byte che il client ha chiesto con l’intestazione Range, come avviene nello streaming video e nei download ripresi. - 207
Multi-Status
Risposta WebDAV che riporta un codice di stato distinto per ciascuna di più risorse o proprietà, in un corpo XML di tipo multistatus. - 208
Already Reported
Usato in una risposta WebDAV 207: i membri della collezione sono già stati elencati, così si evitano ripetizioni infinite se i binding formano un ciclo. - 226
IM Used
Il server ha risposto a un GET con il delta encoding (RFC 3229): il corpo contiene solo le modifiche rispetto a una versione che il client ha già.
3xx Reindirizzamento
Il client deve compiere un’ulteriore azione, di solito richiedere l’URL indicato nell’intestazione Location. Sono questi i codici che formano una catena di reindirizzamenti.
- 300
Multiple Choices
La risorsa ha più rappresentazioni e il client può sceglierne una. I browser non seguono automaticamente un 300, nemmeno con un’intestazione Location. - 301
Moved Permanently
La risorsa ha un nuovo URL permanente, indicato nell’intestazione Location. Client e motori di ricerca dovrebbero usare d’ora in poi il nuovo URL. - 302
Found
La risorsa si trova temporaneamente a un altro URL. I client seguono l’intestazione Location, ma in futuro dovrebbero continuare a usare l’URL originale. - 303
See Other
Reindirizza il client a un altro URL da richiedere con GET, di solito per mostrare una pagina di esito dopo l’invio di un modulo (Post/Redirect/Get). - 304
Not Modified
Risposta a un GET o HEAD condizionale: la copia in cache del client è ancora valida, quindi il server non invia il corpo e la copia viene riutilizzata. - 305
Use Proxy
Deprecato. Indicava al client di ripetere la richiesta tramite il proxy specificato in Location; i browser lo ignorano per motivi di sicurezza. - 306
Non utilizzato (ex Switch Proxy)
Riservato e non utilizzato. Il 306 era stato proposto come “Switch Proxy” e poi abbandonato: non va usato e i client lo trattano come un 3xx sconosciuto. - 307
Temporary Redirect
Redirect temporaneo che ripete la richiesta all’URL di Location con lo stesso metodo e corpo, a differenza del 302, che può trasformare POST in GET. - 308
Permanent Redirect
Redirect permanente che mantiene metodo e corpo della richiesta. Come per il 301, d’ora in poi va usato il nuovo URL, ma un POST non diventa mai GET.
4xx Errore del client
La richiesta non può essere soddisfatta così com’è stata inviata: la pagina non esiste, l’accesso è negato oppure il client ha inviato troppe richieste.
- 400
Bad Request
Il server non elabora la richiesta a causa di un errore del client, come una sintassi non valida, un URL errato o cookie troppo grandi. - 401
Unauthorized
Serve un’autenticazione valida. Il server deve inviare un’intestazione WWW-Authenticate che indica come autenticarsi, per esempio con Basic o Bearer. - 402
Payment Required
Riservato da HTTP per usi futuri. Nella pratica alcune API e alcuni servizi lo usano quando serve un pagamento, del credito o un abbonamento. - 403
Forbidden
Il server ha capito la richiesta ma si rifiuta di autorizzarla. A differenza del 401, inviare di nuovo le stesse credenziali non serve. - 404
Not Found
Il server non ha nulla a questo URL, o non vuole dire se qualcosa esiste. Non indica se l’assenza è temporanea o permanente. - 405
Method Not Allowed
L’URL esiste ma non supporta il metodo HTTP usato, per esempio un POST verso una pagina statica. L’intestazione Allow elenca i metodi supportati. - 406
Not Acceptable
Il server non può produrre una risposta che corrisponda alle intestazioni Accept del client (formato, lingua, codifica) e non vuole inviarne una predefinita. - 407
Proxy Authentication Required
Come il 401, ma a richiedere l’autenticazione è un proxy tra il client e il server. L’intestazione Proxy-Authenticate indica come autenticarsi. - 408
Request Timeout
Il server non ha ricevuto in tempo una richiesta completa e chiude la connessione. Il client può inviare di nuovo la richiesta su una nuova connessione. - 409
Conflict
La richiesta è in conflitto con lo stato attuale della risorsa, per esempio un conflitto di modifica, un record duplicato o una versione non corrispondente. - 410
Gone
La risorsa è stata rimossa di proposito e non dovrebbe tornare. È un segnale permanente più esplicito rispetto al 404 Not Found. - 411
Length Required
Il server rifiuta una richiesta che ha un corpo ma non l’intestazione Content-Length. Il client può inviarla di nuovo con un Content-Length valido. - 412
Precondition Failed
Una condizione nelle intestazioni della richiesta, come If-Match o If-Unmodified-Since, è risultata falsa, quindi il server non ha applicato la modifica. - 413
Content Too Large
Il corpo della richiesta supera la dimensione accettata dal server, come nei caricamenti troppo grandi. Prima: “Payload Too Large” e “Request Entity Too Large”. - 414
URI Too Long
L’URL richiesto è più lungo di quanto il server sia disposto a elaborare, per esempio perché un loop di reindirizzamento continua ad aggiungervi parametri. - 415
Unsupported Media Type
Il server rifiuta il corpo della richiesta perché il suo formato (Content-Type) o la sua codifica del contenuto (Content-Encoding) non sono supportati. - 416
Range Not Satisfiable
L’intervallo di byte nell’intestazione Range della richiesta è fuori dal file, come quando un download riprende oltre la fine di un file modificato. - 417
Expectation Failed
Il server non può soddisfare l’aspettativa indicata nell’intestazione Expect della richiesta. In pratica significa che Expect: 100-continue non è supportato. - 418
I’m a Teapot
Un pesce d’aprile del 1998, dal protocollo per le caffettiere (RFC 2324). In HTTP è riservato come “Unused”, ma alcuni siti lo restituiscono di proposito. - 421
Misdirected Request
La richiesta ha raggiunto un server che non può rispondere per questo nome host, spesso per un SNI TLS non corrispondente o una connessione HTTP/2 riutilizzata. - 422
Unprocessable Content
La richiesta è ben formata ma il contenuto non è semanticamente valido: di solito è un errore di validazione in un’API. Prima “Unprocessable Entity”. - 423
Locked
WebDAV: la risorsa è bloccata, quindi al momento il metodo non può essere applicato. Il client deve avere il token di blocco o attendere che il blocco termini. - 424
Failed Dependency
WebDAV: il metodo non è stato eseguito perché un’altra azione da cui dipendeva non è riuscita, per esempio una singola proprietà in un PROPPATCH. - 425
Too Early
Il server non elabora una richiesta inviata come early data TLS (0-RTT), perché potrebbe essere ritrasmessa (replay). Il client riprova dopo l’handshake. - 426
Upgrade Required
Il server rifiuta di gestire la richiesta con il protocollo attuale e richiede il passaggio al protocollo indicato nell’intestazione Upgrade. - 428
Precondition Required
Il server richiede che la richiesta sia condizionale (If-Match) per evitare la perdita di aggiornamenti quando più client modificano la stessa risorsa. - 429
Too Many Requests
Il client ha inviato troppe richieste in un certo intervallo di tempo (rate limiting). Retry-After può indicare quanto attendere prima di riprovare. - 431
Request Header Fields Too Large
Il server rifiuta la richiesta perché le intestazioni sono troppo grandi, di solito perché il browser invia troppi cookie o cookie troppo grandi. - 444
No Response
nginx Codice nginx non standard: il server chiude la connessione senza inviare alcuna risposta. I client vedono una risposta vuota e mai un 444. - 451
Unavailable For Legal Reasons
Accesso negato per un obbligo legale, come un ordine del tribunale o un blocco governativo. Il nome richiama il romanzo Fahrenheit 451 di Ray Bradbury. - 499
Client Closed Request
nginx Codice non standard che nginx scrive nel log degli accessi quando il client ha chiuso la connessione prima che il server inviasse la risposta.
5xx Errore del server
Il server non è riuscito a soddisfare una richiesta apparentemente valida. Gli errori 5xx persistenti bloccano sia i visitatori sia i crawler.
- 500
Internal Server Error
Errore generico lato server: qualcosa è andato storto sul server, per esempio un crash dell’applicazione o un file di configurazione danneggiato. - 501
Not Implemented
Il server non supporta la funzionalità necessaria per soddisfare la richiesta, di solito un metodo HTTP che non riconosce. - 502
Bad Gateway
Un gateway o un proxy ha ricevuto una risposta non valida dal server a monte, per esempio perché l’applicazione dietro nginx è andata in crash. - 503
Service Unavailable
Il server non è temporaneamente in grado di gestire la richiesta per sovraccarico o manutenzione. Retry-After può indicare quando riprovare. - 504
Gateway Timeout
Un gateway o un proxy non ha ricevuto in tempo una risposta dal server a monte, di solito perché l’applicazione è troppo lenta. - 505
HTTP Version Not Supported
Il server non supporta, o rifiuta di supportare, la versione principale di HTTP usata nella richiesta. Oggi indica spesso una riga di richiesta malformata. - 506
Variant Also Negotiates
Errore di configurazione nella negoziazione trasparente dei contenuti (RFC 2295): la variante scelta è a sua volta negoziabile e si crea un ciclo. - 507
Insufficient Storage
WebDAV: il server non riesce a memorizzare i dati necessari per completare la richiesta, per esempio perché un disco o una quota utente sono pieni. - 508
Loop Detected
WebDAV: il server ha interrotto un’operazione Depth: infinity perché ha trovato un ciclo infinito di binding. Non ha a che fare con i loop di redirect. - 510
Not Extended
Dall’obsoleto HTTP Extension Framework (RFC 2774): nella richiesta manca la dichiarazione di un’estensione obbligatoria. Storico e di fatto inutilizzato. - 511
Network Authentication Required
La rete, di solito un captive portal Wi-Fi, richiede l’accesso prima di consentire la navigazione. Lo inviano le reti che intercettano, non i server di origine. - 520
Web Server Returned an Unknown Error
Cloudflare Specifico di Cloudflare: il server di origine ha restituito una risposta vuota, sconosciuta o inattesa, per esempio dopo un crash o una connessione interrotta. - 521
Web Server Is Down
Cloudflare Specifico di Cloudflare: il server di origine ha rifiutato la connessione di Cloudflare, di solito perché il server web non è attivo o blocca Cloudflare. - 522
Connection Timed Out
Cloudflare Specifico di Cloudflare: Cloudflare non è riuscito a completare in tempo una connessione TCP con l’origine, o l’origine non ha confermato la richiesta. - 523
Origin Is Unreachable
Cloudflare Specifico di Cloudflare: Cloudflare non riesce affatto a raggiungere l’origine, di solito per un problema di instradamento o un IP di origine errato nel DNS. - 524
A Timeout Occurred
Cloudflare Specifico di Cloudflare: Cloudflare si è connesso all’origine ma non ha ricevuto una risposta HTTP entro il timeout di lettura, di default circa due minuti. - 525
SSL Handshake Failed
Cloudflare Specifico di Cloudflare: l’handshake TLS tra Cloudflare e l’origine non è riuscito, per esempio perché l’origine non ha un certificato valido. - 526
Invalid SSL Certificate
Cloudflare Specifico di Cloudflare: in modalità Full (strict) Cloudflare non riesce a convalidare il certificato dell’origine (scaduto, autofirmato o di un altro nome). - 530
Errore Cloudflare 1xxx
Cloudflare Specifico di Cloudflare: inviato insieme a un errore Cloudflare 1xxx, per esempio 1016 (Origin DNS error) o 1033 (Cloudflare Tunnel error).
Come leggere un codice di stato HTTP
La prima cifra indica la classe della risposta, mentre le altre due ne identificano il significato preciso all’interno di quella classe. Un client che non riconosce un codice specifico lo tratta come il codice x00 della sua classe: un codice 4xx sconosciuto, per esempio, viene gestito come 400 Bad Request.
La frase di stato che segue il numero (reason phrase), come Not Found o Moved Permanently, è solo una descrizione pensata per le persone. I client si basano esclusivamente sul numero, e HTTP/2 e HTTP/3 non inviano affatto la frase di stato.
I codici di redirect in sintesi
- 301 Moved Permanently: permanente; i browser possono trasformare un POST in un GET. È la scelta standard per le pagine spostate.
- 302 Found: temporaneo; il metodo può cambiare. È il codice predefinito in molti framework.
- 303 See Other: temporaneo; viene sempre seguito con una richiesta GET. Si usa dopo l’invio di un modulo.
- 307 Temporary Redirect: temporaneo; il metodo e il corpo della richiesta restano invariati.
- 308 Permanent Redirect: permanente; il metodo e il corpo della richiesta restano invariati.
- 304 Not Modified: non è un reindirizzamento verso un altro URL, ma indica che la copia in cache del client è ancora valida.
Per capire quando usare ciascun codice, leggi la nostra guida ai codici di stato HTTP dei redirect.
I codici di stato in una catena di redirect
Una catena di reindirizzamenti è una serie di risposte 3xx che termina con una risposta finale. Il visitatore o il crawler riceve davvero solo l’ultimo codice di stato: una catena che finisce su un 404 è un link rotto, per quanto puliti sembrino i reindirizzamenti che lo precedono. Usa la Verifica redirect URL per vedere il codice di stato di ogni salto (ogni passaggio della catena), oppure la Verifica redirect in blocco per controllare più URL contemporaneamente.
Verifica redirect URL
Scopri tutti i codici di stato restituiti da un URL, salto dopo salto, con la verifica redirect gratuita di TrueURL.