Codici di stato HTTP — Elenco completo con significati ed esempi

Tutti i codici di stato HTTP ufficiali da 100 a 511, più i codici di nginx, Cloudflare e AWS, con quando usare ciascuno.

91 codici

1xx Informativi

100Continue

Risposta intermedia: il server ha ricevuto gli header della richiesta e il client può procedere a inviare il body.

Quando usarlo

Inviato automaticamente dai server quando un client include "Expect: 100-continue" prima di caricare un body di grandi dimensioni, così il client non spreca banda per una richiesta che verrebbe rifiutata.

Quando non usarlo

Non inviarlo dal codice dell'applicazione come stato finale: non è mai la risposta a una richiesta, solo un passaggio prima di quella vera.

Caching

Non applicabile

Definito in

RFC 9110 §15.2.1

Esempio
PUT /upload HTTP/1.1
Content-Length: 104857600
Expect: 100-continue

HTTP/1.1 100 Continue
101Switching Protocols

Il server accetta di passare la connessione al protocollo indicato nell'header Upgrade.

Quando usarlo

La risposta di handshake per le connessioni WebSocket (Upgrade: websocket) e, storicamente, per gli upgrade da HTTP/1.1 a h2c.

Quando non usarlo

HTTP/2 e HTTP/3 non lo usano; i WebSocket su HTTP/2 usano invece il metodo CONNECT esteso (RFC 8441).

Caching

Non applicabile

Definito in

RFC 9110 §15.2.2

Esempio
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
102ProcessingDeprecato

Risposta intermedia che comunica al client che il server sta ancora lavorando su una lunga richiesta WebDAV, quindi non deve andare in timeout.

WebDAV. Rimosso da WebDAV nella RFC 4918 ma ancora presente nel registro IANA.

Quando usarlo

Solo nei vecchi server WebDAV che gestiscono operazioni ricorsive lente, come un COPY o MOVE profondo.

Quando non usarlo

Le nuove API dovrebbero invece restituire 202 Accepted con un URL di stato per le operazioni lunghe.

Caching

Non applicabile

Definito in

RFC 2518 §10.1

Esempio
HTTP/1.1 102 Processing
103Early Hints

Risposta intermedia con header Link, così il browser può iniziare il preload o il preconnect mentre il server prepara ancora la risposta finale.

Quando usarlo

Quando la generazione dell'HTML richiede tempo (rendering lato server, query al database) e sai di quali CSS, font od origini ha bisogno la pagina. I browser Chromium e Firefox seguono i suggerimenti di preload e preconnect nelle risposte 103; Safari segue il preconnect.

Quando non usarlo

Non inserire header che devono valere solo per la risposta finale, come Set-Cookie: i browser ignorano la maggior parte degli header nelle 103.

Caching

Non applicabile

Definito in

RFC 8297

Esempio
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect

HTTP/1.1 200 OK
Content-Type: text/html
104Upload Resumption Supported

Risposta intermedia che comunica al client che il caricamento avviato può essere ripreso in seguito, e dove.

Registrazione IANA temporanea per la bozza IETF sui caricamenti riprendibili; non è ancora una RFC definitiva.

Quando usarlo

Sperimentale: i server che implementano la bozza sui caricamenti riprendibili lo inviano con un header Location che punta alla risorsa del caricamento.

Quando non usarlo

Non adatto all'uso generale finché la bozza non sarà pubblicata come RFC; la maggior parte di client e proxy non lo conosce.

Caching

Non applicabile

Definito in

draft-ietf-httpbis-resumable-upload

Esempio
HTTP/1.1 104 Upload Resumption Supported
Upload-Draft-Interop-Version: 6
Location: https://example.com/upload/b530ce8ff

2xx Successo

200OKMemorizzabile in cache per impostazione predefinita

La richiesta è riuscita. Il contenuto del body dipende dal metodo: la risorsa per GET, il risultato dell'azione per POST.

Quando usarlo

La normale risposta di successo per GET, e per POST, PUT, PATCH o DELETE quando restituisci un body che descrive il risultato.

Quando non usarlo

Non restituire 200 con un messaggio di errore nel body ("soft error"). Client, monitoraggio, cache e motori di ricerca leggono il codice di stato, non il tuo JSON.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.3.1

Esempio
HTTP/1.1 200 OK
Content-Type: application/json

{"id": 42, "name": "Ada"}
201Created

La richiesta è riuscita e ha creato una o più nuove risorse.

Quando usarlo

Dopo un POST (o un PUT su un nuovo URL) che crea qualcosa. Includi un header Location che punta alla nuova risorsa; di solito il body la descrive.

Quando non usarlo

Non usarlo quando non è stato creato nulla di nuovo, ad esempio per l'aggiornamento di un record esistente (usa 200 o 204).

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.3.2

Esempio
HTTP/1.1 201 Created
Location: /users/42
Content-Type: application/json

{"id": 42}
202Accepted

La richiesta è stata accettata per l'elaborazione, ma l'elaborazione non è terminata e potrebbe ancora fallire.

Quando usarlo

Lavori in coda o asincroni: codifica video, generazione di report, importazioni in blocco. Restituisci un link dove il client può controllare lo stato del job.

Quando non usarlo

Non usarlo per indicare "successo" in operazioni sincrone: per definizione non promette nulla sull'esito.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.3.3

Esempio
HTTP/1.1 202 Accepted
Location: /jobs/7f3a
Content-Type: application/json

{"status": "queued"}
203Non-Authoritative InformationMemorizzabile in cache per impostazione predefinita

Successo, ma un proxy di trasformazione ha modificato la risposta 200 del server di origine.

Quando usarlo

Solo da parte di intermediari che modificano il contenuto, come un proxy che comprime le immagini o riscrive l'HTML, per comunicare al client che non si tratta della risposta esatta dell'origine.

Quando non usarlo

I server di origine e le API non dovrebbero inviarlo.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.3.4

Esempio
HTTP/1.1 203 Non-Authoritative Information
Content-Type: image/webp
204No ContentMemorizzabile in cache per impostazione predefinita

Successo, e il body è volutamente assente.

Quando usarlo

Un DELETE riuscito, PUT o PATCH quando non restituisci la risorsa aggiornata, il salvataggio automatico di un modulo o la risposta a un preflight CORS.

Quando non usarlo

Non includere mai un body: i client non lo leggono e in HTTP/1.1 un body indesiderato corrompe la risposta successiva sulla connessione. Usa 200 se hai qualcosa da restituire.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.3.5

Esempio
HTTP/1.1 204 No Content
205Reset Content

Successo; il client dovrebbe reimpostare la vista del documento, ad esempio svuotare il modulo appena inviato.

Quando usarlo

Interfacce di inserimento dati in cui l'utente invia un modulo e inserisce subito un altro record.

Quando non usarlo

I browser non implementano il comportamento di reset, quindi in pratica funziona come 204. Non deve includere un body.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.3.6

Esempio
HTTP/1.1 205 Reset Content
206Partial ContentMemorizzabile in cache per impostazione predefinita

Il server restituisce solo gli intervalli di byte richiesti dal client con un header Range.

Quando usarlo

Avanzamento rapido in video e audio, download riprendibili e download manager che scaricano un file in parti parallele. Includi Content-Range.

Quando non usarlo

Non inviarlo se la richiesta non conteneva un header Range che stai rispettando. Se ignori Range, invia 200 con il body completo.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.3.7

Esempio
GET /video.mp4 HTTP/1.1
Range: bytes=0-1023

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
207Multi-Status

Il body (XML) contiene uno stato separato per ciascuna di più risorse.

WebDAV

Quando usarlo

Operazioni WebDAV come PROPFIND che agiscono su molte risorse. Alcune API JSON lo prendono in prestito per gli endpoint batch.

Quando non usarlo

Per le API batch molti team preferiscono 200 con risultati per singolo elemento, perché i client generici trattano 207 come un semplice successo.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 4918 §11.1

Esempio
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
208Already Reported

Usato all'interno di una risposta 207 per indicare che una risorsa è già stata elencata in precedenza e quindi non viene ripetuta (evita cicli con i binding).

WebDAV

Quando usarlo

Server WebDAV che supportano i binding (RFC 5842).

Quando non usarlo

Non ha senso come risposta di primo livello al di fuori di WebDAV.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 5842 §7.1

Esempio
<D:status>HTTP/1.1 208 Already Reported</D:status>
226IM Used

Il server ha soddisfatto un GET con un delta (instance manipulation) applicato alla risorsa corrente invece della risorsa completa.

Quando usarlo

Delta encoding per HTTP (header A-IM / IM). Raramente adottato.

Quando non usarlo

Non supportato dai browser; non usarlo nelle normali API.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 3229 §10.4.1

Esempio
HTTP/1.1 226 IM Used
IM: vcdiff
ETag: "v2"

3xx Reindirizzamento

300Multiple ChoicesMemorizzabile in cache per impostazione predefinita

La risorsa ha più rappresentazioni e il client (o l'utente) dovrebbe sceglierne una.

Quando usarlo

Raro: negoziazione del contenuto guidata dal client, ad esempio offrire un documento in più lingue o formati con un link a ciascuno.

Quando non usarlo

I browser non scelgono automaticamente. Per scegliere lingua o formato funziona meglio la negoziazione lato server o una normale pagina con i link.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.4.1

Esempio
HTTP/1.1 300 Multiple Choices
Link: </doc.en.html>; rel=alternate; hreflang=en
Link: </doc.fr.html>; rel=alternate; hreflang=fr
301Moved PermanentlyMemorizzabile in cache per impostazione predefinita

La risorsa ha un nuovo URL permanente, indicato nell'header Location.

Quando usarlo

Cambi di dominio, passaggio da HTTP a HTTPS, slug modificati, consolidamento di URL duplicati. I motori di ricerca trasferiscono i segnali di ranking al nuovo URL.

Quando non usarlo

I browser possono trasformare un POST in GET quando seguono un 301. Se il metodo deve essere mantenuto (un endpoint API spostato), usa 308. I browser memorizzano i 301 in cache in modo aggressivo, quindi fai dei test prima del deploy.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.4.2

Esempio
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page
302Found

La risorsa si trova temporaneamente a un URL diverso; in futuro continua a usare l'URL originale.

Quando usarlo

Reindirizzamenti temporanei: redirect al login, test A/B, pagine di manutenzione, redirect per area geografica o lingua.

Quando non usarlo

I browser trasformano un POST in GET quando seguono un 302 (comportamento storico consentito dalla RFC). Usa 303 per "vai a vedere il risultato" dopo un POST e 307 quando il metodo va mantenuto.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.4.3

Esempio
HTTP/1.1 302 Found
Location: /login?next=%2Faccount
303See Other

Reindirizza il client a un altro URL, che deve richiedere con GET.

Quando usarlo

Il pattern Post/Redirect/Get: dopo il POST di un modulo, invia 303 verso la pagina del risultato, così ricaricare la pagina non reinvia il modulo.

Quando non usarlo

Non serve per contenuti spostati: non dice nulla sul fatto che l'URL originale sia stato spostato.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.4.4

Esempio
HTTP/1.1 303 See Other
Location: /orders/1234
304Not Modified

Risposta a un GET o HEAD condizionale (If-None-Match o If-Modified-Since): la copia in cache del client è ancora valida.

Riconvalida della cache: non viene memorizzato a sua volta, ma aggiorna la risposta in cache che il client possiede già.

Quando usarlo

Inviato automaticamente da server e CDN quando l'ETag o la data Last-Modified corrispondono, evitando di trasferire un body invariato.

Quando non usarlo

Non inviare mai un body. Non inviarlo in risposta a una richiesta non condizionale: il client non ha nulla da riutilizzare.

Caching

Non applicabile

Definito in

RFC 9110 §15.4.5

Esempio
GET /app.js HTTP/1.1
If-None-Match: "33a64df5"

HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=3600
305Use ProxyDeprecato

Deprecato. Un tempo indicava al client di ripetere la richiesta tramite un proxy indicato in Location.

Quando usarlo

Niente. È stato deprecato per motivi di sicurezza e i browser lo ignorano.

Quando non usarlo

Non inviarlo.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.4.6

Esempio
HTTP/1.1 305 Use Proxy
306(Unused)Deprecato

Riservato. Era usato in una bozza per "Switch Proxy" e non è più in uso.

Quando usarlo

Niente.

Quando non usarlo

Non inviarlo.

Caching

Non applicabile

Definito in

RFC 9110 §15.4.7

307Temporary Redirect

Reindirizzamento temporaneo in cui il client deve ripetere la richiesta con lo stesso metodo e lo stesso body.

Quando usarlo

Reindirizzare temporaneamente richieste POST, PUT o DELETE (un endpoint API spostato per manutenzione). I browser mostrano anche un 307 interno quando HSTS impone HTTPS.

Quando non usarlo

Per uno spostamento permanente usa 308. Per "vai a prendere il risultato con GET" usa 303.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.4.8

Esempio
HTTP/1.1 307 Temporary Redirect
Location: https://api2.example.com/v1/orders
308Permanent RedirectMemorizzabile in cache per impostazione predefinita

Reindirizzamento permanente in cui il client deve ripetere la richiesta con lo stesso metodo e lo stesso body.

Quando usarlo

Un endpoint API spostato in modo permanente che riceve POST o PUT. I motori di ricerca lo trattano come un 301. Next.js e Vercel usano 308 per i redirect permanenti per impostazione predefinita.

Quando non usarlo

I client molto vecchi (Internet Explorer su Windows 7 e precedenti) non lo capiscono; per il semplice spostamento di pagine 301 va altrettanto bene.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.4.9

Esempio
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/api/v2/upload

4xx Errore del client

400Bad Request

Il server non elaborerà la richiesta a causa di un errore del client: sintassi malformata, framing non valido o parametri non validi.

Quando usarlo

JSON non analizzabile, un parametro obbligatorio mancante, un valore del tipo sbagliato. Spiega il problema nel body (problem+json della RFC 9457 è un buon formato).

Quando non usarlo

Per input ben formati che violano le regole di business molte API usano 422. Per problemi di autenticazione usa 401 o 403.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.1

Esempio
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{"title": "Invalid JSON", "detail": "Unexpected token } at position 41"}
401Unauthorized

Alla richiesta mancano credenziali di autenticazione valide. Nonostante il nome, significa "non autenticato".

Quando usarlo

Nessun token, un token scaduto o una password errata. La risposta deve includere un header WWW-Authenticate che descrive come autenticarsi.

Quando non usarlo

Se l'utente ha effettuato l'accesso ma non è autorizzato, usa 403. Non inviare 401 senza WWW-Authenticate.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.2

Esempio
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token"
402Payment Required

Riservato per uso futuro. Non ha una semantica standard.

Quando usarlo

Alcune API lo usano per "quota esaurita, passa a un piano superiore" o per un pagamento non riuscito (Stripe restituisce 402 per le richieste con carta rifiutata).

Quando non usarlo

Non contare sul fatto che i client lo capiscano; descrivi il problema nel body.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.3

Esempio
HTTP/1.1 402 Payment Required
Content-Type: application/json

{"error": "card_declined"}
403Forbidden

Il server ha capito la richiesta e sa chi sei (o non gli interessa), ma si rifiuta di soddisfarla.

Quando usarlo

L'utente autenticato non ha i permessi, un IP è bloccato, l'elenco delle directory è disattivato o è scattata una regola del WAF. Autenticarsi di nuovo non serve.

Quando non usarlo

Se le credenziali mancano o non sono valide, usa 401. Se rivelare l'esistenza della risorsa è già di per sé una fuga di informazioni, restituisci invece 404.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.4

Esempio
HTTP/1.1 403 Forbidden
Content-Type: application/json

{"error": "You do not have access to this project"}
404Not FoundMemorizzabile in cache per impostazione predefinita

Il server non ha una rappresentazione attuale per l'URL, oppure non vuole dire se ne esiste una.

Quando usarlo

URL sconosciuti, record eliminati quando non tieni traccia delle eliminazioni, o per nascondere risorse agli utenti non autorizzati.

Quando non usarlo

Se la risorsa esisteva ed è sparita per sempre, 410 lo dichiara esplicitamente. Non restituire una pagina 200 che dice "non trovato" (soft 404).

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.5.5

Esempio
HTTP/1.1 404 Not Found
Content-Type: text/html
405Method Not AllowedMemorizzabile in cache per impostazione predefinita

L'URL esiste, ma non supporta questo metodo HTTP.

Quando usarlo

Un DELETE su una risorsa di sola lettura o un POST su una pagina solo GET. La risposta deve includere un header Allow con l'elenco dei metodi supportati.

Quando non usarlo

Non usarlo per problemi di permessi (403) né per metodi che il server non implementa affatto (501).

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.5.6

Esempio
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
406Not Acceptable

Il server non può produrre una risposta che corrisponda agli header Accept, Accept-Language o Accept-Encoding della richiesta.

Quando usarlo

Un'API che parla solo JSON e riceve "Accept: application/xml" senza alternative.

Quando non usarlo

La maggior parte dei server ignora gli header Accept non soddisfatti e invia il formato predefinito, che di solito è una scelta più amichevole.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.7

Esempio
HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{"supported": ["application/json"]}
407Proxy Authentication Required

Come 401, ma il client deve autenticarsi presso il proxy intermedio.

Quando usarlo

Inviato dai forward proxy (proxy aziendali), con un header Proxy-Authenticate.

Quando non usarlo

I server di origine non dovrebbero mai inviarlo.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.8

Esempio
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="corp-proxy"
408Request Timeout

Il server non ha ricevuto una richiesta completa entro il tempo che era disposto ad attendere e sta chiudendo la connessione.

Quando usarlo

Inviato dai server su connessioni keep-alive inattive o caricamenti lenti. I client possono ripetere la richiesta su una nuova connessione.

Quando non usarlo

Non per un'elaborazione lenta nel back-end: quello è un 504 su un gateway o semplicemente una risposta lenta. Invialo insieme a "Connection: close".

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.9

Esempio
HTTP/1.1 408 Request Timeout
Connection: close
409Conflict

La richiesta è in conflitto con lo stato attuale della risorsa.

Quando usarlo

Creare un utente con un'email già esistente, modificare un record cambiato da qualcun altro (versione non corrispondente), eliminare una cartella non vuota.

Quando non usarlo

Per condizioni If-Match / If-Unmodified-Since non soddisfatte usa 412. Per errori di validazione usa 400 o 422.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.10

Esempio
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error": "Email already registered"}
410GoneMemorizzabile in cache per impostazione predefinita

La risorsa esisteva qui, è sparita in modo permanente e non ha un indirizzo di inoltro.

Quando usarlo

Prodotti fuori produzione, promozioni scadute, account eliminati, versioni di API dismesse. Google tratta 404 e 410 quasi allo stesso modo, anche se un 410 potrebbe essere rimosso dall'indice un po' prima.

Quando non usarlo

Se il contenuto è stato spostato, reindirizza invece con 301. Se non sei sicuro che sia permanente, usa 404.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.5.11

Esempio
HTTP/1.1 410 Gone
411Length Required

Il server richiede un header Content-Length in questa richiesta.

Quando usarlo

Server che rifiutano i caricamenti chunked e devono conoscere in anticipo la dimensione del body.

Quando non usarlo

Raramente necessario nelle applicazioni; di solito è generato direttamente dal web server.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.12

Esempio
HTTP/1.1 411 Length Required
412Precondition Failed

Una condizione negli header della richiesta (If-Match, If-Unmodified-Since, If-None-Match in scrittura) è risultata falsa.

Quando usarlo

Concorrenza ottimistica: il client ha inviato If-Match con un vecchio ETag, quindi qualcun altro ha modificato la risorsa prima.

Quando non usarlo

Non usarlo per violazioni delle regole di business che non c'entrano con gli header condizionali (409 o 422).

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.13

Esempio
PUT /docs/7 HTTP/1.1
If-Match: "v3"

HTTP/1.1 412 Precondition Failed
ETag: "v4"
413Content Too Large

Il body della richiesta è più grande di quanto il server sia disposto a elaborare. Chiamato "Payload Too Large" prima della RFC 9110.

Quando usarlo

Caricamenti oltre il limite (client_max_body_size di nginx, un tetto di 10 MB in un'API). Se il limite è temporaneo, aggiungi Retry-After.

Quando non usarlo

Per un URL troppo lungo usa 414; per header troppo grandi usa 431.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.14

Esempio
HTTP/1.1 413 Content Too Large
Connection: close
414URI Too LongMemorizzabile in cache per impostazione predefinita

Il target della richiesta (URL) è più lungo di quanto il server sia disposto a interpretare.

Quando usarlo

Query string enormi, spesso un modulo GET che dovrebbe essere un POST, o un loop di redirect che continua ad aggiungere parametri.

Quando non usarlo

Sposta gli input voluminosi nel body di una richiesta (POST) invece di alzare il limite all'infinito.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.5.15

Esempio
HTTP/1.1 414 URI Too Long
415Unsupported Media Type

Il server rifiuta la richiesta perché il formato del body (Content-Type o Content-Encoding) non è supportato.

Quando usarlo

Un endpoint che accetta JSON e riceve dati di un modulo o XML, oppure un header Content-Type mancante. Includi Accept-Post o Accept-Patch per indicare cosa è supportato.

Quando non usarlo

Non per un body nel formato giusto ma con contenuto non valido (400 o 422).

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.16

Esempio
HTTP/1.1 415 Unsupported Media Type
Accept-Post: application/json
416Range Not Satisfiable

Nessuno degli intervalli di byte nell'header Range si sovrappone alla risorsa, ad esempio richiedendo byte oltre la fine del file.

Quando usarlo

Download ripresi in cui il file si è ridotto o il client chiede oltre la sua fine. Includi Content-Range: bytes */<length>.

Quando non usarlo

I server possono anche semplicemente ignorare un Range non valido e restituire 200 con il body completo, anche questo è consentito.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.17

Esempio
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */47022
417Expectation Failed

Il server non può soddisfare il requisito indicato nell'header Expect della richiesta.

Quando usarlo

Un client ha inviato "Expect: 100-continue" a un server o proxy che non lo supporta, oppure un'aspettativa sconosciuta.

Quando non usarlo

I client che lo ricevono dovrebbero riprovare senza l'header Expect.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.18

Esempio
HTTP/1.1 417 Expectation Failed
418(Unused)

Riservato dalla RFC 9110 perché 418 era molto diffuso come codice scherzoso “I’m a teapot”; in HTTP non ha un significato definito.

Riservato. Famoso come “I’m a teapot” dalla RFC 2324 (HTCPCP), un pesce d'aprile del 1998.

Quando usarlo

Solo come easter egg. Alcuni servizi lo usano per rispondere in modo spiritoso alle richieste che vogliono rifiutare.

Quando non usarlo

Non usarlo per errori reali: non gli si può assegnare un significato e i client non sapranno cosa fare.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.19

Esempio
HTTP/1.1 418 I'm a teapot
419Page ExpiredNon ufficiale · Laravel

Laravel lo restituisce quando il token CSRF manca o è scaduto, di solito dopo il timeout della sessione su una pagina con un modulo.

Quando usarlo

Inviato dal middleware CSRF di Laravel. Si risolve ricaricando la pagina, includendo @csrf nei moduli o inviando l'header X-CSRF-TOKEN con le richieste AJAX.

Quando non usarlo

Non è un codice standard; non inviarlo da API non Laravel.

Caching

Non applicabile

Definito in

Laravel (non presente nel registro IANA)

Esempio
HTTP/1.1 419 unknown status
420Enhance Your CalmNon ufficiale · Twitter (legacy)

La risposta di rate limit della vecchia API di Twitter, sostituita dal codice standard 429.

Quando usarlo

Niente di nuovo. Potresti ancora trovarlo in vecchie librerie client. Spring aveva definito 420 "Method Failure", ora deprecato.

Quando non usarlo

Usa 429 per il rate limiting.

Caching

Non applicabile

Definito in

Twitter API v1 (non presente nel registro IANA)

Esempio
HTTP/1.1 420 Enhance Your Calm
421Misdirected Request

La richiesta ha raggiunto un server che non può produrre una risposta per quell'host e quello schema.

Quando usarlo

Il connection coalescing di HTTP/2 non è andato a buon fine: il browser ha riutilizzato una connessione per un altro hostname coperto dallo stesso certificato, ma il server non lo serve. Il client dovrebbe riprovare su una nuova connessione.

Quando non usarlo

Non per i normali hostname sconosciuti su un singolo server; in quel caso di solito si ha un 404 o il virtual host predefinito.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.20

Esempio
HTTP/2 421
422Unprocessable Content

La richiesta è ben formata e in un formato supportato, ma il suo contenuto non supera la validazione. Chiamato "Unprocessable Entity" nella RFC 4918.

Quando usarlo

Errori di validazione di moduli e API: un'email che non è un'email, una data di fine precedente alla data di inizio. Rails, Laravel e FastAPI lo usano per impostazione predefinita.

Quando non usarlo

Per una sintassi malformata (JSON non analizzabile) usa 400.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.21

Esempio
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json

{"errors": {"email": ["is invalid"]}}
423Locked

La risorsa è bloccata, quindi la richiesta non può modificarla.

WebDAV

Quando usarlo

Semantica LOCK di WebDAV. Alcune API lo usano per record in modifica da parte di qualcun altro o per account bloccati dopo tentativi di accesso falliti.

Quando non usarlo

Al di fuori di WebDAV, 409 è compreso meglio dai client generici.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 4918 §11.3

Esempio
HTTP/1.1 423 Locked
424Failed Dependency

L'azione non è riuscita perché è fallita un'altra azione da cui dipendeva.

WebDAV

Quando usarlo

In un PROPPATCH WebDAV o in una richiesta batch, gli elementi non tentati perché un elemento precedente è fallito.

Quando non usarlo

Non per i guasti dei servizi a monte: quelli sono 502 o 503.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 4918 §11.4

Esempio
HTTP/1.1 424 Failed Dependency
425Too Early

Il server non elaborerà una richiesta inviata come early data TLS 1.3 (0-RTT) perché potrebbe essere ripetuta da un attaccante (replay).

Quando usarlo

CDN e server che accettano 0-RTT ma rifiutano le richieste non idempotenti (POST) negli early data. Il client riprova dopo il completamento dell'handshake.

Quando non usarlo

Non è un codice generico "riprova più tardi"; per quello usa 503 con Retry-After.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 8470 §5.2

Esempio
HTTP/1.1 425 Too Early
426Upgrade Required

Il server rifiuta la richiesta con il protocollo attuale, ma la accetterebbe dopo un upgrade indicato nell'header Upgrade.

Quando usarlo

Per richiedere TLS o un protocollo più recente, o quando un endpoint WebSocket riceve una semplice richiesta HTTP. Deve includere un header Upgrade.

Quando non usarlo

Per passare da HTTP a HTTPS sui siti web, l'approccio abituale è un redirect 301 o 308 più HSTS.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.5.22

Esempio
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3, HTTP/1.1
Connection: Upgrade
428Precondition Required

Il server richiede che la richiesta sia condizionale (If-Match ecc.), per evitare aggiornamenti persi.

Quando usarlo

API che pretendono che i client inviino If-Match con l'ultimo ETag visto prima di un PUT, PATCH o DELETE.

Quando non usarlo

Usa 412 quando una precondizione è stata inviata e non è soddisfatta; 428 è per quando non ne è stata inviata nessuna.

Caching

Non deve essere memorizzato dalle cache

Definito in

RFC 6585 §3

Esempio
HTTP/1.1 428 Precondition Required
Content-Type: application/json

{"error": "Send If-Match with the current ETag"}
429Too Many Requests

Il client ha inviato troppe richieste in un dato intervallo di tempo (rate limiting).

Quando usarlo

Limiti di frequenza delle API, limitazione dei tentativi di login, protezione dallo scraping. Includi Retry-After, così i client corretti sanno quando tornare; anche gli header RateLimit aiutano.

Quando non usarlo

Per un server sovraccarico per tutti, usa 503. Googlebot tratta 429 come 503 e rallenta la scansione.

Caching

Non deve essere memorizzato dalle cache

Definito in

RFC 6585 §4

Esempio
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{"error": "Rate limit exceeded: 100 requests per minute"}
431Request Header Fields Too Large

Gli header, singolarmente o nel complesso, sono troppo grandi per il server.

Quando usarlo

Di solito cookie troppo grandi accumulati su un dominio, o token Authorization enormi. Cancellare i cookie spesso risolve il problema per gli utenti.

Quando non usarlo

Per un URL lungo usa 414; per un body grande usa 413.

Caching

Non deve essere memorizzato dalle cache

Definito in

RFC 6585 §5

Esempio
HTTP/1.1 431 Request Header Fields Too Large
440Login Time-outNon ufficiale · Microsoft IIS / Exchange

La sessione del client è scaduta e deve effettuare di nuovo l'accesso (Outlook Web Access e altre app IIS).

Quando usarlo

Si incontra negli ambienti Exchange/OWA.

Quando non usarlo

Nelle tue app usa 401 per le sessioni scadute.

Caching

Non applicabile

Definito in

Microsoft IIS (non presente nel registro IANA)

Esempio
HTTP/1.1 440 Login Time-out
444No ResponseNon ufficiale · nginx

Codice interno di nginx: "return 444;" chiude la connessione senza inviare alcuna risposta.

Quando usarlo

Per scartare le richieste degli scanner, le richieste con header Host sconosciuti in un blocco server predefinito o i client abusivi. Compare nei log di nginx; il client vede una risposta vuota.

Quando non usarlo

Il client non riceve mai un 444, quindi non è qualcosa da gestire nel codice client.

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
server {
  listen 80 default_server;
  return 444;
}
449Retry WithNon ufficiale · Microsoft

Estensione Microsoft: la richiesta va ripetuta dopo che il client ha eseguito un'azione specifica.

Quando usarlo

Si incontra in alcuni servizi Microsoft (Exchange ActiveSync; Azure Cosmos DB usa 449 per i conflitti di scrittura ripetibili).

Quando non usarlo

Non standard; nelle tue API usa 409 o 503 con Retry-After.

Caching

Non applicabile

Definito in

Microsoft IIS (non presente nel registro IANA)

Esempio
HTTP/1.1 449 Retry With
450Blocked by Windows Parental ControlsNon ufficiale · Microsoft

Il Controllo genitori di Windows ha bloccato l'accesso alla pagina.

Quando usarlo

Generato sui sistemi Windows con il controllo genitori attivo.

Quando non usarlo

Non inviarlo dai server.

Caching

Non applicabile

Definito in

Microsoft (non presente nel registro IANA)

Esempio
HTTP/1.1 450 Blocked by Windows Parental Controls
451Unavailable For Legal ReasonsMemorizzabile in cache per impostazione predefinita

L'accesso è negato per un obbligo legale: un ordine del tribunale, una censura governativa o una restrizione geografica per motivi legali.

Quando usarlo

Contenuti bloccati in una giurisdizione (sanzioni, blocchi geografici legati al GDPR, ordini di rimozione). Un header Link con rel="blocked-by" può indicare chi ha imposto il blocco.

Quando non usarlo

Non per i normali dinieghi di permesso (403) né per contenuti che hai semplicemente deciso di rimuovere (410).

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 7725 §3

Esempio
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://authority.example/>; rel="blocked-by"
460Client closed connection (AWS ELB)Non ufficiale · AWS Application Load Balancer

Registrato da un AWS ALB quando il client ha chiuso la connessione prima della scadenza dell'idle timeout.

Quando usarlo

Si vede nei log di accesso dell'ALB; di solito indica un client con un timeout più breve del tempo di elaborazione del target.

Quando non usarlo

Non viene inviato ai client.

Caching

Non applicabile

Definito in

AWS Elastic Load Balancing (non presente nel registro IANA)

Esempio
elb_status_code=460
463Too many IPs in X-Forwarded-For (AWS ELB)Non ufficiale · AWS Application Load Balancer

L'ALB ha ricevuto un header X-Forwarded-For con più di 30 indirizzi IP.

Quando usarlo

Di solito è un loop di proxy che continua ad aggiungere indirizzi.

Quando non usarlo

Non per l'uso nelle applicazioni.

Caching

Non applicabile

Definito in

AWS Elastic Load Balancing (non presente nel registro IANA)

Esempio
HTTP/1.1 463
494Request Header Too LargeNon ufficiale · nginx

Codice interno di nginx per header che superano large_client_header_buffers; il client riceve un 400.

Quando usarlo

Compare nei log di nginx e nella configurazione di error_page.

Quando non usarlo

Il codice standard è 431.

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
error_page 494 /header-too-large.html;
495SSL Certificate ErrorNon ufficiale · nginx

Interno di nginx: il client ha presentato un certificato client non valido (TLS reciproco). Inviato al client come 400.

Quando usarlo

Pagine di errore personalizzate per i fallimenti mTLS.

Quando non usarlo

Non è un codice di stato trasmesso in rete.

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
error_page 495 /bad-client-cert.html;
496SSL Certificate RequiredNon ufficiale · nginx

Interno di nginx: era richiesto un certificato client ma non è stato fornito. Inviato al client come 400.

Quando usarlo

Pagine di errore personalizzate quando ssl_verify_client è attivo.

Quando non usarlo

Non è un codice di stato trasmesso in rete.

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
error_page 496 /client-cert-required.html;
497HTTP Request Sent to HTTPS PortNon ufficiale · nginx

Interno di nginx: una semplice richiesta HTTP è arrivata su una porta che si aspetta TLS. Inviato al client come 400.

Quando usarlo

Un trucco comune è "error_page 497 =301 https://$host$request_uri;" per reindirizzare queste richieste a HTTPS.

Quando non usarlo

Non è un codice di stato trasmesso in rete.

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
error_page 497 =301 https://$host:$server_port$request_uri;
498Invalid TokenNon ufficiale · Esri ArcGIS Server

ArcGIS lo restituisce per un token scaduto o comunque non valido.

Quando usarlo

Rilevante solo quando si chiamano i servizi ArcGIS.

Quando non usarlo

Nelle tue API usa 401 per i token non validi.

Caching

Non applicabile

Definito in

Esri ArcGIS (non presente nel registro IANA)

Esempio
HTTP/1.1 498 Invalid Token
499Client Closed RequestNon ufficiale · nginx

nginx registra 499 quando il client ha chiuso la connessione prima che nginx inviasse una risposta.

Quando usarlo

Si vede nei log di accesso: utenti che cambiano pagina, client mobili in timeout o un load balancer davanti a nginx con un timeout più breve. Molti 499 su un endpoint di solito indicano che è troppo lento.

Quando non usarlo

Il client non lo riceve mai. Esri usa 499 anche per "Token Required".

Caching

Non applicabile

Definito in

nginx (non presente nel registro IANA)

Esempio
203.0.113.9 - - [16/Oct/2026:10:12:01 +0000] "GET /report HTTP/1.1" 499 0

5xx Errore del server

500Internal Server Error

Il server ha incontrato una condizione imprevista che gli ha impedito di soddisfare la richiesta.

Quando usarlo

Eccezioni non gestite e bug. È il ripiego generico quando non si applica un 5xx più specifico.

Quando non usarlo

Non usarlo per errori del client (4xx). In produzione non esporre stack trace nel body; registrali nei log.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.6.1

Esempio
HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json

{"title": "Internal Server Error", "traceId": "4bf92f35"}
501Not ImplementedMemorizzabile in cache per impostazione predefinita

Il server non supporta la funzionalità richiesta, in genere un metodo HTTP che non riconosce affatto.

Quando usarlo

Una richiesta con un metodo sconosciuto (ad es. un metodo WebDAV su un semplice web server) o una funzionalità che il server volutamente non ha ancora implementato.

Quando non usarlo

Se il metodo è noto ma non consentito su questo URL, usa 405.

Caching

Memorizzabile in cache per impostazione predefinita (in modo euristico)

Definito in

RFC 9110 §15.6.2

Esempio
HTTP/1.1 501 Not Implemented
502Bad Gateway

Un gateway o un proxy ha ricevuto una risposta non valida dal server a monte.

Quando usarlo

Inviato da reverse proxy e load balancer (nginx, Cloudflare, AWS ALB) quando il server dell'applicazione si è bloccato, ha chiuso la connessione o ha restituito dati senza senso.

Quando non usarlo

Il codice dell'applicazione raramente ha bisogno di inviarlo, tranne i gateway API che chiamano un altro servizio andato in errore.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.6.3

Esempio
HTTP/1.1 502 Bad Gateway
Server: nginx
503Service Unavailable

Il server non può gestire la richiesta in questo momento: è sovraccarico o in manutenzione. La situazione dovrebbe essere temporanea.

Quando usarlo

Manutenzione programmata, riduzione del carico, interruzione di una dipendenza. Aggiungi Retry-After. Durante brevi periodi di 503 i motori di ricerca mantengono la pagina indicizzata, a differenza di una pagina di manutenzione con 200 o di un 404.

Quando non usarlo

Non lasciare un sito in 503 per giorni: alla lunga Google rimuove gli URL che continuano a restituirlo.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.6.4

Esempio
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
504Gateway Timeout

Un gateway o un proxy non ha ricevuto in tempo una risposta dal server a monte.

Quando usarlo

Inviato da proxy e load balancer quando l'applicazione impiega più del timeout del proxy (proxy_read_timeout di nginx è di 60 secondi per impostazione predefinita).

Quando non usarlo

Per i lavori lunghi non limitarti ad alzare i timeout: restituisci 202 ed elabora in modo asincrono.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.6.5

Esempio
HTTP/1.1 504 Gateway Timeout
Server: awselb/2.0
505HTTP Version Not Supported

Il server non supporta la versione principale di HTTP usata nella richiesta.

Quando usarlo

Un server che riceve una versione del protocollo che non sa gestire.

Quando non usarlo

Raro; i client negoziano HTTP/2 e HTTP/3 tramite ALPN e Alt-Svc anziché per tentativi.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 9110 §15.6.6

Esempio
HTTP/1.1 505 HTTP Version Not Supported
506Variant Also Negotiates

Errore di configurazione del server: la variante scelta è a sua volta configurata per negoziare, creando un ciclo.

Negoziazione trasparente del contenuto (sperimentale)

Quando usarlo

Solo server che implementano la negoziazione trasparente del contenuto della RFC 2295.

Quando non usarlo

Non per gli errori dell'applicazione.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 2295 §8.1

Esempio
HTTP/1.1 506 Variant Also Negotiates
507Insufficient Storage

Il server non può memorizzare ciò che serve per completare la richiesta.

WebDAV

Quando usarlo

API WebDAV o di archiviazione file quando il disco o la quota dell'utente sono pieni.

Quando non usarlo

Per un singolo caricamento che supera un limite di dimensione, 413 è più chiaro.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 4918 §11.5

Esempio
HTTP/1.1 507 Insufficient Storage
508Loop Detected

Il server ha interrotto un'operazione perché ha rilevato un ciclo infinito (binding WebDAV con Depth: infinity).

WebDAV

Quando usarlo

Server WebDAV. Anche gli hosting condivisi basati su CloudLinux inviano 508 "Resource Limit Is Reached" quando un account raggiunge i propri limiti, un uso non standard.

Quando non usarlo

Non per i loop di redirect: quelli sono un errore lato client che il browser segnala da sé.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 5842 §7.2

Esempio
HTTP/1.1 508 Loop Detected
509Bandwidth Limit ExceededNon ufficiale · Apache bw_mod / cPanel

L'account di hosting ha superato la banda disponibile.

Quando usarlo

Pannelli di controllo degli hosting condivisi.

Quando non usarlo

Nei tuoi sistemi usa 503 o 429.

Caching

Non applicabile

Definito in

Apache / cPanel (non presente nel registro IANA)

Esempio
HTTP/1.1 509 Bandwidth Limit Exceeded
510Not ExtendedDeprecato

La richiesta non rispettava la policy di accesso alla risorsa prevista dall'HTTP Extension Framework.

Contrassegnato come obsoleto nel registro IANA: la RFC 2774 è stata spostata tra quelle storiche (Historic).

Quando usarlo

Niente di attuale; l'extension framework non è mai stato implementato su larga scala.

Quando non usarlo

Non inviarlo.

Caching

Memorizzabile in cache solo con Cache-Control o Expires espliciti

Definito in

RFC 2774 §7

Esempio
HTTP/1.1 510 Not Extended
511Network Authentication Required

Il client deve autenticarsi per ottenere l'accesso alla rete: un captive portal.

Quando usarlo

Portali Wi-Fi di hotel, aeroporti e bar che intercettano il traffico finché l'utente non effettua l'accesso o accetta le condizioni.

Quando non usarlo

I server di origine non devono mai inviarlo; è riservato ai proxy di rete che intercettano il traffico.

Caching

Non deve essere memorizzato dalle cache

Definito in

RFC 6585 §6

Esempio
HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<meta http-equiv="refresh" content="0; url=https://login.example.net/">
520Web Server Returned an Unknown ErrorNon ufficiale · Cloudflare

L'origine ha restituito a Cloudflare una risposta vuota, sconosciuta o inattesa.

Quando usarlo

Controlla i log dell'origine: crash, connessioni reimpostate, header oltre il limite di Cloudflare o una risposta vuota.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 520
server: cloudflare
521Web Server Is DownNon ufficiale · Cloudflare

Cloudflare non è riuscita a connettersi all'origine: la connessione è stata rifiutata.

Quando usarlo

Il web server di origine è fermo, oppure un firewall blocca gli intervalli IP di Cloudflare.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 521
server: cloudflare
522Connection Timed OutNon ufficiale · Cloudflare

Cloudflare è andata in timeout nello stabilire una connessione TCP con l'origine.

Quando usarlo

Origine sovraccarica, pacchetti scartati da un firewall o un IP di origine errato nel DNS.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 522
server: cloudflare
523Origin Is UnreachableNon ufficiale · Cloudflare

Cloudflare non riesce proprio a raggiungere l'origine, di solito per un problema di routing o un record DNS errato.

Quando usarlo

Verifica che i record DNS A/AAAA puntino all'IP giusto e raggiungibile.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 523
server: cloudflare
524A Timeout OccurredNon ufficiale · Cloudflare

Cloudflare si è connessa all'origine, ma l'origine non ha inviato una risposta HTTP entro il timeout (100 secondi per impostazione predefinita).

Quando usarlo

Richieste di lunga durata: sposta il lavoro in un job in background e interrogalo periodicamente, oppure trasmetti l'avanzamento in streaming.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 524
server: cloudflare
525SSL Handshake FailedNon ufficiale · Cloudflare

L'handshake TLS tra Cloudflare e l'origine non è riuscito.

Quando usarlo

L'origine non è in ascolto sulla 443, manca il certificato, non ci sono cipher suite in comune o SNI non è configurato, mentre la modalità SSL è Full o Full (strict).

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 525
server: cloudflare
526Invalid SSL CertificateNon ufficiale · Cloudflare

In modalità Full (strict), Cloudflare non è riuscita a convalidare il certificato dell'origine: scaduto, autofirmato o con hostname errato.

Quando usarlo

Installa sull'origine un certificato valido o un certificato Cloudflare Origin CA.

Quando non usarlo

Lo invia solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 526
server: cloudflare
527Railgun ErrorNon ufficiale · Cloudflare (dismesso)Deprecato

Problema di connessione tra Cloudflare e un listener Railgun sull'origine. Cloudflare ha dismesso Railgun.

Quando usarlo

Solo di interesse storico.

Quando non usarlo

Lo inviava solo Cloudflare.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/1.1 527 Railgun Error
530Origin DNS / 1xxx errorNon ufficiale · Cloudflare

Restituito insieme a una pagina di errore Cloudflare 1xxx (come 1016 Origin DNS error); la vera causa è il codice 1xxx mostrato nella pagina.

Quando usarlo

Cerca il numero di errore 1xxx mostrato nella pagina.

Quando non usarlo

Lo inviano solo CDN e provider di hosting.

Caching

Non applicabile

Definito in

Cloudflare (non presente nel registro IANA)

Esempio
HTTP/2 530
server: cloudflare
561Unauthorized (AWS ELB)Non ufficiale · AWS Application Load Balancer

L'autenticazione integrata dell'ALB (OIDC o Cognito) non è riuscita presso l'identity provider.

Quando usarlo

Controlla la configurazione dell'IdP nella regola del listener dell'ALB.

Quando non usarlo

Non per l'uso nelle applicazioni.

Caching

Non applicabile

Definito in

AWS Elastic Load Balancing (non presente nel registro IANA)

Esempio
HTTP/1.1 561
598Network Read Timeout ErrorNon ufficiale · Alcuni proxy HTTP

Usato da alcuni proxy per segnalare un timeout di lettura a valle del proxy.

Quando usarlo

Raro; potresti vederlo con alcuni prodotti proxy.

Quando non usarlo

Usa 504.

Caching

Non applicabile

Definito in

Informal convention (non presente nel registro IANA)

Esempio
HTTP/1.1 598
599Network Connect Timeout ErrorNon ufficiale · Alcuni proxy e client HTTP

Usato da alcuni proxy e librerie client (ad esempio il client HTTP di Tornado) per un timeout di connessione.

Quando usarlo

Raro.

Quando non usarlo

Per i proxy usa 504.

Caching

Non applicabile

Definito in

Informal convention (non presente nel registro IANA)

Esempio
HTTP/1.1 599

Un riferimento statico che funziona nel tuo browser; le tue ricerche non vengono inviate da nessuna parte. Sfoglia tutti gli strumenti gratuiti.

Hai trovato un problema o qualcosa che potrebbe andare meglio? Leggiamo ogni messaggio e sistemiamo le cose in fretta.

Questo elenco dei codici di stato HTTP copre tutti i codici del registro IANA, da 100 Continue a 511 Network Authentication Required, con il significato, quando usarlo, quando no, se le cache possono memorizzarlo e la sezione RFC che lo definisce. Digita un numero, una classe come 4xx o una parola come "redirect" o "rate limit" per filtrare, e collegati direttamente a qualsiasi codice con un'ancora come #404 o #503.

Le voci ufficiali seguono la RFC 9110 (2022), che ha sostituito la RFC 7231 e rinominato alcuni codici: 413 ora è Content Too Large e 422 è Unprocessable Content. Sono inclusi anche i codici che vedi nei log ma non trovi nel registro, come nginx 499 o Cloudflare 522, contrassegnati come non ufficiali e con il sistema che li invia. È un riferimento, non un monitor: non recupera URL né controlla lo stato restituito da un sito online.

Come si usa

  1. Digita un codice (503), una classe (4xx) o una parola chiave (timeout, redirect, cache) nella casella di ricerca. I risultati si filtrano mentre scrivi.
  2. Usa i pulsanti delle classi per vedere solo i codici 1xx, 2xx, 3xx, 4xx o 5xx, e deseleziona "Includi i codici non ufficiali" per nascondere quelli specifici dei fornitori.
  3. Fai clic su un codice per espanderlo: significato, quando usarlo, quando no, comportamento in cache, RFC di riferimento e una risposta di esempio.
  4. Usa "Copia il link a questo codice" per condividere un link diretto come /tools/http-status-codes#429.

Domande frequenti

Qual è la differenza tra 401 e 403?

401 Unauthorized significa che la richiesta non ha credenziali valide: il client non ha effettuato l'accesso o il token è scaduto. Il server deve inviare un'intestazione WWW-Authenticate che indica come autenticarsi. 403 Forbidden significa che il server sa chi è il client, o non ha bisogno di saperlo, e rifiuta comunque; accedere di nuovo non servirà. In breve, 401 è "chi sei?" e 403 è "lo so, e la risposta è no".

Per un reindirizzamento permanente conviene usare 301 o 308?

Sono entrambi permanenti ed entrambi trasferiscono i segnali di ranking su Google. La differenza è il metodo: seguendo un 301, i browser possono trasformare un POST in un GET, mentre il 308 obbliga il client a ripetere lo stesso metodo e lo stesso corpo. Per i normali spostamenti di pagina va bene il 301; per un endpoint API che riceve POST o PUT, usa il 308. La stessa coppia esiste per i reindirizzamenti temporanei: il 302 può cambiare il metodo, il 307 no.

Che cosa significa 499 nei log di nginx?

499 Client Closed Request è un codice esclusivo di nginx. Viene registrato quando il client ha chiuso la connessione prima che nginx inviasse una risposta, quindi il client non riceve mai davvero un 499. Qualche 499 occasionale sono utenti che hanno cambiato pagina; molti su un unico endpoint di solito indicano che è troppo lento e che i client o un load balancer a monte vanno in timeout prima.

Qual è la differenza tra 502, 503 e 504?

Tutti e tre provengono da un server posto davanti a un altro. 502 Bad Gateway significa che il proxy ha ricevuto una risposta non valida o una connessione interrotta dall'applicazione a monte. 503 Service Unavailable significa che il server non è temporaneamente in grado di gestire le richieste, di solito per sovraccarico o manutenzione, e dovrebbe includere Retry-After. 504 Gateway Timeout significa che il proxy ha smesso di aspettare la risposta del server a monte.

418 I'm a teapot è un vero codice di stato?

È nato come pesce d'aprile nella RFC 2324 (1998) ed è stato implementato da abbastanza software che oggi la RFC 9110 elenca il 418 come "(Unused)": riservato, perché non gli venga mai attribuito un significato reale. Non è un errore da inviare per problemi veri, ma va benissimo tenerlo in un easter egg.

Quali codici di stato possono essere memorizzati in cache per impostazione predefinita?

La RFC 9110 indica 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 e 501 come memorizzabili in cache in modo euristico, il che significa che una cache può conservarli anche senza Cache-Control o Expires. La RFC 7725 aggiunge il 451. Gli altri codici, compresi 302 e 307, vengono memorizzati solo quando la risposta contiene informazioni esplicite di validità, e la RFC 6585 stabilisce che 428, 429, 431 e 511 non devono essere memorizzati affatto.

Le cinque classi in breve

• 1xx Informativi: risposte intermedie prima di quella finale. Raramente li gestisci direttamente; in pratica contano il 101 (upgrade a WebSocket) e il 103 (Early Hints).

• 2xx Successo: la richiesta è andata a buon fine. 200 per una risposta normale, 201 quando è stato creato qualcosa (con un'intestazione Location), 204 quando volutamente non c'è corpo.

• 3xx Reindirizzamento: il client deve cercare altrove. 301/308 per spostamenti permanenti, 302/307 per quelli temporanei, 303 dopo il POST di un modulo, 304 quando la copia in cache è ancora valida.

• 4xx Errore del client: la richiesta è sbagliata e ripeterla invariata fallirà di nuovo. 400 malformata, 401 non autenticata, 403 non consentita, 404 non trovata, 409 conflitto, 422 validazione non superata, 429 limite di richieste superato.

• 5xx Errore del server: la richiesta può essere corretta ma il server ha fallito. 500 è un bug, 502/504 sono errori tra proxy e server a monte, 503 è un'indisponibilità temporanea.

Scegliere il codice giusto in un'API

Restituisci il codice più specifico su cui un client generico può agire, e metti i dettagli nel corpo. Un client HTTP con retry, una CDN o un sistema di monitoraggio sanno cosa significano 429 e 503 senza leggere il tuo JSON, ma non possono interpretare un 200 con {"error": true}. La RFC 9457 (Problem Details) definisce una struttura JSON standard per i corpi degli errori.

Una mappatura pratica per la maggior parte delle API JSON: 400 per un input non analizzabile, 422 per un input ben formato che non supera la validazione, 401 quando il token manca o è scaduto, 403 quando l'utente non ha i permessi, 404 per ID sconosciuti (anche per nascondere risorse che un utente non può vedere), 409 per duplicati e conflitti di versione, 412 quando un ETag If-Match non è più aggiornato, 429 con Retry-After per i limiti di frequenza e 503 con Retry-After per i fermi programmati.

Non inventare nuovi numeri. I client trattano un codice sconosciuto come l'x00 della sua classe (un 4xx sconosciuto viene gestito come un 400), quindi un 461 personalizzato non ti dà nulla in più di un 400 con un messaggio chiaro.

Codici di stato e SEO

I motori di ricerca leggono i codici di stato alla lettera. Un 301 o un 308 trasferisce i segnali del vecchio URL a quello nuovo; un 302 o un 307 dice a Google di mantenere indicizzato il vecchio URL. 404 e 410 rimuovono entrambi una pagina dall'indice col tempo. Una pagina con stato 200 che dice "non trovato" è un soft 404, che Google rileva e segnala in Search Console. Per la manutenzione, un breve periodo di 503 con Retry-After mantiene intatti i posizionamenti, mentre una pagina 200 "torniamo presto" può sostituire i tuoi contenuti nei risultati di ricerca. Googlebot rallenta anche la frequenza di scansione quando riceve 429, 500 o 503.

Strumenti gratuiti correlati

  • Parser di user agent — Vedi il tuo user agent e i client hint, oppure analizza qualsiasi stringa UA in browser, motore, sistema operativo, dispositivo e CPU. Modalità in blocco con CSV.
  • Formattatore JSON — Formatta, minifica e valida JSON, con gli errori di parsing localizzati per riga e colonna. Nel tuo browser, senza upload.
  • Docker Run ⇄ Compose — Trasforma un comando docker run in un servizio docker-compose.yml, o un servizio Compose di nuovo in docker run.
  • Tester regex — Prova un'espressione regolare su un testo di esempio con evidenziazione delle corrispondenze in tempo reale, gruppi di cattura e anteprima della sostituzione. Gratis, nel browser.