Prontuario dei codici di stato HTTP
HTTP Status Reference
Spiega ogni codice di stato con il significato che gli dà la specifica, la sua memorizzabilità in cache e gli errori che si fanno usandolo.
Un riferimento consultabile per ogni codice di stato HTTP: che cosa significa, quale RFC lo definisce, se una cache può conservarlo per impostazione predefinita e con quale intestazione va mandato. La ricerca trova il codice, il nome e il riepilogo e accetta una query in inglese, coreano, giapponese, cinese semplificato e spagnolo — ma non in italiano.
Cerca nel codice, nel nome, nel riassunto e nelle note — in inglese, coreano, giapponese, cinese semplificato e spagnolo.
404 Not Found
404Not Found
A questa URL non c’è nessuna risorsa.
Errore del client — La colpa è della richiesta. Riprovarla senza cambiarla fallirà allo stesso modo.
RFC 9110 §15.5.5In cache per impostazione predefinita
sì
Memorizzabile in cache per impostazione predefinita: un fatto che sorprende tutti la prima volta che una CDN continua a servire un 404 per una pagina che ormai esiste.
62 su 62 codici
| Codice | Nome | Significa | In cache |
|---|---|---|---|
| 100 | Continue | Il client può proseguire e inviare il corpo della richiesta. | no |
| 101 | Switching Protocols | Il server sta passando al protocollo chiesto dal client. | no |
| 102 | Processing | WebDAV: la richiesta è in lavorazione. | no |
| 103 | Early Hints | Intestazioni preliminari, così il client può iniziare a precaricare prima della risposta vera. | no |
| 200 | OK | La richiesta è andata a buon fine. | sì |
| 201 | Created | È stata creata una nuova risorsa. | no |
| 202 | Accepted | La richiesta è stata accettata ma non ancora eseguita. | no |
| 203 | Non-Authoritative Information | Un proxy ha modificato la risposta che sta inoltrando. | sì |
| 204 | No Content | Successo, e non c’è corpo di proposito. | sì |
| 205 | Reset Content | Successo; il client dovrebbe svuotare il modulo che ha inviato. | no |
| 206 | Partial Content | L’intervallo di byte richiesto. | sì |
| 207 | Multi-Status | WebDAV: un corpo XML con uno stato per ogni sotto-richiesta. | no |
| 208 | Already Reported | WebDAV: questo membro era già stato enumerato. | no |
| 226 | IM Used | La risposta è il risultato di manipolazioni di istanza applicate. | no |
| 300 | Multiple Choices | Esistono più rappresentazioni; scegline una. | sì |
| 301 | Moved Permanently | La risorsa ha una nuova URL, per sempre. | sì |
| 302 | Found | Un reindirizzamento temporaneo. | no |
| 303 | See Other | Vai a prendere l’altra URL con GET. | no |
| 304 | Not Modified | La copia in cache va ancora bene. | no |
| 305 | Use Proxy | Deprecato: il client dovrebbe usare il proxy indicato. | no |
| 307 | Temporary Redirect | Un reindirizzamento temporaneo che mantiene il metodo. | no |
| 308 | Permanent Redirect | Un reindirizzamento permanente che mantiene il metodo. | sì |
| 400 | Bad Request | La richiesta è malformata e il server non la elabora. | no |
| 401 | Unauthorized | Serve autenticarsi, oppure le credenziali fornite sono state rifiutate. | no |
| 402 | Payment Required | Riservato, e non gli è mai stato dato un significato. | no |
| 403 | Forbidden | Il server ha capito, e rifiuta. | no |
| 404 | Not Found | A questa URL non c’è nessuna risorsa. | sì |
| 405 | Method Not Allowed | La URL esiste; questo metodo non le si applica. | sì |
| 406 | Not Acceptable | Niente di ciò che il server può produrre corrisponde all’intestazione `Accept`. | no |
| 407 | Proxy Authentication Required | Il proxy vuole le credenziali. | no |
| 408 | Request Timeout | Il client ci ha messo troppo a inviare la richiesta. | no |
| 409 | Conflict | La richiesta è in conflitto con lo stato attuale. | no |
| 410 | Gone | Era qui e, di proposito, non tornerà. | sì |
| 411 | Length Required | Serve un’intestazione `Content-Length`. | no |
| 412 | Precondition Failed | Una condizione `If-Match` o `If-Unmodified-Since` non è stata soddisfatta. | no |
| 413 | Content Too Large | Il corpo è più grande di quanto il server accetti. | no |
| 414 | URI Too Long | La URL è più lunga di quanto il server accetti. | sì |
| 415 | Unsupported Media Type | Il `Content-Type` del corpo non è tra quelli che il server gestisce. | no |
| 416 | Range Not Satisfiable | L’intervallo richiesto sta fuori dalla risorsa. | no |
| 417 | Expectation Failed | L’intestazione `Expect` non può essere soddisfatta. | no |
| 418 | I'm a teapot | Uno scherzo del primo aprile del 1998 che non se n’è più andato. | no |
| 421 | Misdirected Request | Questo server non può produrre una risposta per questa autorità. | no |
| 422 | Unprocessable Content | Ben formato, ma semanticamente sbagliato. | no |
| 423 | Locked | WebDAV: la risorsa è bloccata. | no |
| 424 | Failed Dependency | WebDAV: una richiesta precedente della sequenza è fallita. | no |
| 425 | Too Early | Il server non vuole rischiare di rieseguire una richiesta inviata come dati anticipati. | no |
| 426 | Upgrade Required | Il client deve cambiare protocollo. | no |
| 428 | Precondition Required | Il server pretende che la richiesta sia condizionale. | no |
| 429 | Too Many Requests | Limite di richieste raggiunto. | no |
| 431 | Request Header Fields Too Large | Le intestazioni sono troppo grandi. | no |
| 451 | Unavailable For Legal Reasons | Bloccato per una richiesta legale. | sì |
| 500 | Internal Server Error | Qualcosa è andato storto e il server non ha niente di più preciso da dire. | no |
| 501 | Not Implemented | Il server non supporta affatto quel metodo. | sì |
| 502 | Bad Gateway | Un server a monte ha mandato qualcosa di non valido. | no |
| 503 | Service Unavailable | Temporaneamente incapace di gestire la richiesta. | no |
| 504 | Gateway Timeout | Un server a monte non ha risposto in tempo. | no |
| 505 | HTTP Version Not Supported | La versione di HTTP indicata nella richiesta non è supportata. | no |
| 506 | Variant Also Negotiates | Una configurazione sbagliata della negoziazione del contenuto. | no |
| 507 | Insufficient Storage | WebDAV: non c’è spazio sufficiente per salvare la rappresentazione. | no |
| 508 | Loop Detected | WebDAV: un ciclo infinito durante l’elaborazione. | no |
| 510 | Not Extended | Servono ulteriori estensioni. | no |
| 511 | Network Authentication Required | Un captive portal vuole che tu acceda. | no |
Quelli che si confondono
- 401 vuol dire «non so chi sei»: manda le credenziali e riprova. 403 vuol dire «so chi sei e la risposta è no». Se le credenziali erano valide ma insufficienti, è 403.
- Il 400 riguarda una richiesta che il server non riesce a leggere. Il 422 riguarda una che ha letto benissimo e con cui non è d’accordo. Un 422 si può riprovare con dati diversi; un 400 di solito vuol dire che è il client stesso a essere rotto.
- Il primo asse è la permanenza (301/308 permanenti, 302/307 temporanei) e il secondo è la conservazione del metodo (307/308 lo mantengono, 301/302 storicamente no). Nel dubbio, su una API usa 307 o 308.
- Vengono entrambi da un proxy, non dalla tua applicazione. Il 502 è «quello a monte ha risposto una sciocchezza o è morto»; il 504 è «quello a monte non ha mai risposto». Il secondo è un timeout che puoi regolare; il primo è un guasto che devi riparare.
- Entrambi vogliono dire che lì non c’è niente. Il 410 vuol dire in più che non tornerà mai, e i motori di ricerca ne tengono conto in pochi giorni anziché in mesi.
- Il 405 è «non su questa URL, ma ecco quello che va» — e deve mandare un’intestazione `Allow`. Il 501 è «questo server non implementa quel metodo da nessuna parte».
Come si usa
Cercare, oppure filtrare per classe
Basta digitare un numero, un nome o il problema che si ha: «gateway», «rate limit», «unauthorized». L’indice di ricerca non contiene l’italiano, quindi «autenticazione» non trova niente mentre «authentication» sì. Oppure si restringe a 4xx e si legge in giù.
Aprirne uno per il dettaglio
Il pannello di dettaglio dà la specifica che lo definisce, se è conservabile in cache in modo euristico e ogni intestazione che la risposta è obbligata a portare — un 405 senza `Allow` e un 301 senza `Location` sono entrambi incompleti.
Leggere le coppie che si confondono
La sezione in fondo copre quelli che vengono scelti male: 401 contro 403, 302 contro 307, 502 contro 504.
Domande frequenti
Qual è la differenza fra 401 e 403?
401 vuol dire che la richiesta non aveva credenziali valide e deve includere un’intestazione `WWW-Authenticate` che dice come fornirle. 403 vuol dire che le credenziali sono state capite e non bastano. Mandare 401 a un utente autenticato che non ha il permesso è l’errore più comune.
Perché la mia CDN conserva in cache un 404?
Perché può. La RFC 9110 §15.1 elenca i codici di stato che una cache può conservare in modo euristico quando nient’altro dice diversamente, e il 404 è nell’elenco. Una pagina pubblicata nel frattempo resta «non trovata» finché la cache non scade o non la si svuota — su un 404 che ci si aspetta diventi 200 va mandato `Cache-Control: no-store`.
302 o 307?
307, se si vuole conservare il metodo. Storicamente i client trasformavano un POST in un GET su un 302 — la specifica non lo diceva, ma lo facevano tutti — perciò 307 e 308 esistono per dire senza ambiguità «stesso metodo, URL nuovo».
Si può inventare un proprio codice di stato?
Si può mandare qualunque cosa, e i client trattano un codice sconosciuto come il membro generico della sua classe: un 499 viene gestito come un 400. Ma cache, proxy e librerie decidono in base alla classe, quindi un codice non registrato non porta niente che un’intestazione non possa portare meglio.
Può ricevere da
Ricerca di tipi MIME
MIME Type Lookup
Cerca un tipo MIME a partire da un’estensione o viceversa, e lo deduce dai byte del file.
Ispettore di intestazioni HTTP
HTTP Header Inspector
Richiede un URL e mostra tutte le intestazioni di risposta, la catena di redirect, i tempi e la compressione usata.
Formattatore e validatore JSON
JSON Formatter & Validator
Formatta, minifica e valida il JSON, indicando riga e colonna esatte di un errore di sintassi.
Formattatore e validatore YAML
YAML Formatter & Validator
Riporta il YAML a un’indentazione coerente, lo valida e segnala gli errori di tabulazione e di ancora che rompono i parser.
Dopo
Questi accettano ciò che produce questo strumento, così il risultato può passare direttamente.
Costruttore di richieste HTTP
HTTP Request Builder
Compone e invia una richiesta GET, POST, PUT, PATCH, DELETE o HEAD con intestazioni e corpo a piacere, e mostra stato, intestazioni, corpo e tempi — senza mai inoltrare i cookie né l’header Authorization.
Ispettore di intestazioni HTTP
HTTP Header Inspector
Richiede un URL e mostra tutte le intestazioni di risposta, la catena di redirect, i tempi e la compressione usata.
Ricerca di tipi MIME
MIME Type Lookup
Cerca un tipo MIME a partire da un’estensione o viceversa, e lo deduce dai byte del file.
Codificatore e decodificatore Base64
Base64 Encoder & Decoder
Codifica e decodifica in Base64 e Base64URL testo o file, trattando correttamente l’UTF-8.
Da curl a codice
curl to Code
Converte un comando curl in fetch, axios, requests di Python, Go, PHP o PowerShell.
Hash di un testo
Text Hash
Calcola MD5, SHA-1, SHA-256, SHA-384, SHA-512 e CRC-32 di una stringa, con uscita in maiuscolo o in Base64.