Guida ai Codici di Stato HTTP

Una guida consultabile di tutti i codici di stato HTTP ufficiali — cosa significa ciascuno e quando un server dovrebbe inviarlo, secondo RFC 9110 e le RFC correlate.

197 visualizzazioni

Perché i Codici di Stato Sono Raggruppati per Primo Numero

Ogni codice di stato HTTP è un numero a tre cifre, e la prima cifra da sola dice a un client la categoria generale della risposta ancor prima che legga il resto - una scelta di progettazione incorporata in HTTP fin dalle sue prime specifiche e mantenuta nel tempo, formalizzata oggi in RFC 9110, il documento che ha consolidato e sostituito la più vecchia serie RFC 7230-7235 per definire la semantica di HTTP indipendentemente da una singola versione del protocollo (HTTP/1.1, HTTP/2, HTTP/3 condividono tutti gli stessi significati dei codici di stato). 1xx (Informativo) significa che la richiesta è stata ricevuta e compresa e l'elaborazione continua - queste sono risposte provvisorie che un client non dovrebbe trattare come definitive. 2xx (Successo) significa che la richiesta è stata ricevuta, compresa e accettata. 3xx (Reindirizzamento) significa che è necessaria un'ulteriore azione per completare la richiesta, tipicamente recuperare un URL diverso. 4xx (Errore Client) significa che la richiesta, così come inviata, contiene un problema causato dal client - sintassi errata, autenticazione mancante, una risorsa che non esiste. 5xx (Errore Server) significa che la richiesta era apparentemente valida ma il server non è riuscito a soddisfarla. Questo sistema basato sulla prima cifra significa che un client che riconosce solo la cifra "4" e nient'altro riguardo a un codice specifico sa comunque, correttamente, che qualcosa nella propria richiesta deve essere corretto anziché ritentato identicamente - questo comportamento di ripiego è precisamente il motivo per cui lo standard lo impone.

La seconda e la terza cifra suddividono ogni classe in significati specifici e documentati, e ci si aspetta che un client ricada nel comportamento generale della classe per qualsiasi codice che non riconosca specificamente - questo è il motivo per cui codici oscuri o più recenti come 226 o 508 restano sicuri da gestire in modo approssimativamente corretto anche da software più vecchi senza supporto esplicito. I codici non vengono nemmeno inventati liberamente: il registro completo è mantenuto dall'IANA (Internet Assigned Numbers Authority) proprio affinché "599" o "250" non possano significare due cose diverse su due server diversi - ogni codice in uso attivo si ricollega a una specifica RFC che ne definisce la semantica esatta, molte delle quali estendono la specifica HTTP/1.1 originale per protocolli particolari, il più visibile essendo WebDAV (RFC 4918), da cui provengono i codici 207, 208, 422, 423, 424 e 507/508 di questa pagina.

Due Codici da Conoscere con Precisione: 404 contro 410

Due dei codici più comunemente confusi sono 404 Not Found e 410 Gone, e la distinzione non è cosmetica - cambia il modo in cui si comportano un motore di ricerca e un browser. 404 è deliberatamente ambiguo: il server non ha informazioni sul fatto che la risorsa sia mai esistita a quell'URL, se potrebbe tornare, o se l'URL sia stato semplicemente digitato male. 410 è un'affermazione deliberata e più forte: la risorsa esisteva a quell'esatto URL ed è stata intenzionalmente, permanentemente rimossa, senza indirizzo di inoltro - RFC 9110 raccomanda esplicitamente 410 specificamente per questo caso in cui "la condizione è probabilmente permanente," dove un 404 sottostimerebbe la certezza. I motori di ricerca trattano questo diversamente in pratica: un URL che restituisce 404 ripetuti viene tipicamente rimosso dall'indice solo dopo essere stato ri-scansionato più volte per un periodo prolungato nel caso tornasse disponibile, mentre un 410 segnala una rimozione intenzionale e i motori di ricerca generalmente agiscono più velocemente, deindicizzando la pagina prima perché il server ha esplicitamente garantito che non tornerà. Usare correttamente 410 quando si ritira permanentemente una pagina - anziché usare sempre 404 per tutto - è una leva SEO tecnica piccola ma reale.

  • 301 contro 302 contro 307 contro 308: 301 e 308 significano entrambi "spostato permanentemente," mentre 302 e 307 significano entrambi "spostato temporaneamente" - la coppia più recente 307/308 è stata introdotta specificamente per garantire che il metodo di richiesta e il corpo vengano preservati durante il reindirizzamento (un POST rimane un POST), perché il comportamento storico diffuso dei browser convertiva silenziosamente i reindirizzamenti 301/302 in un GET, il che rompeva il reinvio dei moduli in modi che i nuovi codici risolvono.
  • 401 contro 403: 401 Unauthorized tecnicamente significa "non sei autenticato - accedi," nonostante il nome fuorviante; 403 Forbidden significa "sei identificato, ma non hai il permesso di accedere a questo," una distinzione che molte API sfumano nella pratica ma che la specifica mantiene chiaramente separata.
  • 429 Too Many Requests (RFC 6585) è la risposta standard per la limitazione della velocità ed è comunemente associata a un header Retry-After che indica al client esattamente quanto attendere prima di riprovare.
  • I codici 1xx sono raramente visti direttamente perché la maggior parte delle librerie client HTTP li gestisce in modo trasparente prima ancora che il codice della tua applicazione veda una risposta - 100 Continue, ad esempio, permette a un client di verificare se un corpo di richiesta di grandi dimensioni valga la pena di essere inviato prima di inviarlo.

Domande Frequenti

Qual è la differenza reale tra 404 e 410?

Entrambi significano che la risorsa non può essere trovata, ma 404 lascia ambiguo se sia mai esistita o possa tornare, mentre 410 è un'affermazione deliberata che la risorsa esisteva a quell'URL ed è stata rimossa permanentemente e intenzionalmente. I motori di ricerca generalmente deindicizzano una pagina 410 più velocemente di una 404 perché il server ha esplicitamente confermato che la rimozione è permanente.

Il 418 "Sono una Teiera" è un codice di stato reale e utilizzabile?

Ha avuto origine nella RFC 2324, l'"Hyper Text Coffee Pot Control Protocol" del 1998, una RFC scherzo del pesce d'aprile. Non fu mai pensata seriamente, ma si è dimostrata utile come codice di test distintivo e non ambiguo, e RFC 9110 oggi la preserva formalmente con una nota esplicita che il suo stato è opzionale e non ci si aspetta che sia implementata da server reali.

Perché i reindirizzamenti 301 e 302 a volte rompono l'invio dei moduli?

Storicamente, molti browser convertivano silenziosamente una richiesta POST reindirizzata in una richiesta GET quando seguivano un 301 o 302, scartando il corpo inviato. I nuovi codici 307 (Temporary Redirect) e 308 (Permanent Redirect) sono stati introdotti specificamente per garantire che il metodo HTTP originale e il corpo della richiesta vengano preservati durante il reindirizzamento.

Qual è la differenza tra 401 e 403?

401 Unauthorized in realtà significa che il client non si è affatto autenticato - nonostante il nome, sta chiedendo credenziali. 403 Forbidden significa che il client è identificato ma esplicitamente non autorizzato ad accedere a quella specifica risorsa. Molte API del mondo reale li usano in modo approssimativo o intercambiabile, ma la specifica mantiene i significati distinti.

Da dove provengono i codici specifici di WebDAV come 507 o 423?

Sono definiti nella RFC 4918, la specifica WebDAV (Web Distributed Authoring and Versioning), che estende l'HTTP semplice con operazioni per la gestione remota dei file come bloccare una risorsa (423 Locked) o segnalare che il server ha esaurito lo spazio di archiviazione (507 Insufficient Storage). Rimangono parte del registro ufficiale IANA dei codici di stato HTTP insieme ai codici HTTP principali.

Commenti

Ancora nessun commento — scrivi il primo!

Strumenti Simili