Cosa significano questi codici di stato HTTP?
I codici di stato HTTP sono una parte vitale della navigazione sul web. Ogni volta che fai una richiesta, ogni volta che fai clic su un link o inserisci un URL, riceverai una risposta. Dietro quella risposta c’è un codice numerico che riassume il risultato.
Hai sentito parlare del codice 404 e probabilmente hai maledetto il tuo browser ogni volta che ne mostra uno. Ma HTTP è più potente di quanto potresti immaginare e i codici di stato gestiscono molti scenari diversi. Continua a leggere per saperne di più su questi piccoli numeri criptici.
Come comunicano client e server Web
La navigazione sul Web è resa possibile dalla comunicazione tra client e server. Quando chiedi di visualizzare una pagina, il tuo client (browser) invia una richiesta a un server (sito web). Si spera che la richiesta abbia successo, a quel punto il server invia una risposta da leggere.
Nella sua risposta, il server web include più del semplice contenuto. Per cominciare, include una serie di intestazioni, piccoli pezzi di metadati che si applicano alla risposta. Ad esempio, l’intestazione Content-Type potrebbe essere simile a questa:
Content-Type: text/html; charset=UTF-8
Ciò significa che “la risposta è HTML” anziché un’immagine o un file musicale.
Ma prima del contenuto, prima ancora delle intestazioni, ogni risposta HTTP include una riga simile a questa:
HTTP/1.1 200 OK
In questo esempio, accanto alla versione HTTP (1.1), un codice di stato legge “200 OK”. In altre parole, “va tutto bene, ecco il tuo contenuto”. Il 200 è il bit più importante. I sistemi possono testarlo per determinare esattamente cosa è successo. “OK” è un breve suggerimento carino, che descrive lo stato di ogni essere umano che guarda.
Esempi di codici di stato comuni
I codici di stato 404 e 200 sono molto comuni, ma ci sono molte più possibilità.
- 500 (INTERNAL SERVER ERROR) è uno stato di errore. Significa che qualcosa è andato storto sul server e non può soddisfare la richiesta. Potrebbe trattarsi di un bug di programmazione o di un altro errore di runtime.
- 403 (VIETATO) significa che il server ha compreso la richiesta ma si rifiuta di consentirla. Ciò si applica spesso alle azioni relative agli utenti in app Web più complicate. Ad esempio, provando a modificare un post di proprietà di qualcun altro.
- 401 (UNAUTHORIZED) è molto simile a 403. In questo caso, la richiesta originale non è autorizzata ad accedere alla risorsa perché non ha fornito alcuna credenziale utente. In altre parole, non hai effettuato l’accesso.
- 400 (BAD REQUEST) significa che il server non riusciva a capire cosa veniva richiesto. Forse mancano alcune informazioni, come un parametro URL. Forse qualcosa ha danneggiato la richiesta in transito.
Gruppi di codici di stato HTTP
Tutti i codici di stato che abbiamo visto finora sono di tre cifre, tutti compresi tra 200 e 500. Non è una coincidenza. Gli stati HTTP sono composti da tutte e tre le cifre, con la prima cifra compresa tra uno e cinque, inclusi. E il valore di quella prima cifra inserisce il codice in uno dei cinque gruppi, ciascuno con un significato specifico.
Il primo gruppo, 1xx, è “informativo”. Tutti questi casi indicano che il server ha compreso la richiesta, ma non è pronto a inviare una risposta. Non li vedrai molto in azione, ma sono lì per i sistemi che ne hanno bisogno.
Il gruppo 2xx è la sede della risposta che di solito desideri: 200 (OK) . Questo è il caso di successo più comune, ma ce ne sono altri.
Il codice 204 (NO CONTENT) è piuttosto strano. Un server può restituirlo come risultato di un PUT o di un POST o di un PATCH. Il significato, in questi casi, sarebbe che il server ha effettuato l’aggiornamento, ma non è necessario restituire nulla al client.
I codici nel gruppo 3xx dimostrano come gli stati HTTP vadano oltre la semplice comunicazione di successo o fallimento. I codici di stato che iniziano con 3 indicano un reindirizzamento. Ciò significa che la richiesta originale non era male, ma il client dovrebbe invece utilizzare un URL diverso.
Questo può essere temporaneo, come nel caso di 302 (FOUND) , che un sito potrebbe utilizzare per ospitare un URL promozionale che reindirizza a una pagina del prodotto finale. Un sito potrebbe invece utilizzare un reindirizzamento permanente, tramite lo stato 301 (SPOSTATO PERMANENTEMENTE) . Questa è una buona pratica quando, ad esempio, un sito ha cambiato il nome di una pagina.
Gli stati di reindirizzamento sono generalmente accompagnati da un’intestazione Posizione . Questo dice al client quale URL richiedere invece di quello originale. I server spesso rispondono con intestazioni aggiuntive. Questi forniranno informazioni più utili rispetto al solo codice di stato.
Gli stati che iniziano con 4 sono errori del client. In sostanza, significano “il browser (o la persona che lo utilizza) ha fatto qualcosa di sbagliato”. Abbiamo già discusso molti di questi (400, 401, 403, 404) e questo è il più grande gruppo di codici di stato di una quantità significativa. Altri esempi di errore del client includono la richiesta di un URL che esisteva ma non esiste più: 410 (GONE) . C’è anche 429 (TROPPE RICHIESTE) , che supporta la limitazione della velocità in modo che le risorse non vengano sovraccaricate. Questo è molto comunemente usato dalle API REST.
Infine, gli stati nell’intervallo 500-599 indicano che qualcosa è andato storto con il server mentre cercava di soddisfare la richiesta.
Ottenere lo stato HTTP con curl
Lo strumento da riga di comando HTTP per tutti gli usi più comunemente usato è curl . Utilizzando curl, puoi inviare richieste HTTP a mano, vedere i dettagli delle risposte sottostanti ed esaminare i codici di stato.
Il programma curl non rende incredibilmente facile mostrare solo un codice di stato, ma puoi farlo utilizzando alcune opzioni, vale a dire:
- -o <nomefile> dice a curl di inviare il suo output predefinito a un file. Puoi usarlo per scartare tutto l’output normale.
- -w <formato> visualizza le informazioni personalizzate da un insieme di variabili disponibili, una delle quali è “http_code”, ovvero il codice di stato della risposta.
Puoi anche usare -s per nascondere alcuni dettagli che l’arricciatura mostra tipicamente sul trasferimento, come l’avanzamento in tempo reale. Ecco come mettere insieme queste opzioni:
$ curl -sw "%{http_code}" -o /dev/null http://example.org
200
$ curl -sw "%{http_code}" -o /dev/null http://bbc.co.uk
301
Oppure puoi usare opzioni leggermente diverse e una pipeline per manipolare il risultato:
$ curl -sI http://example.org/no | head -1 | cut -f2 -d' '
404
Visualizzazione dei codici di stato in un browser web
Se hai bisogno di controllare i codici di stato HTTP, il tuo browser web può aiutarti. La maggior parte dei browser moderni dispone di una console in grado di visualizzare informazioni avanzate. Utilizzando Chrome come esempio, ecco come controllare il codice di stato di un URL:
- Scegli Visualizza -> Sviluppatore -> Strumenti per sviluppatori dal menu principale. Questo attiva una piccola finestra nella parte inferiore del browser.
- Se non stai già guardando la scheda Rete della finestra Strumenti per sviluppatori, passa ad essa.
- Fare clic sul pulsante Doc per visualizzare solo le richieste di contenuto della pagina.
- Aggiorna la pagina che stai guardando.
Si noti che, accanto agli URL richiesti, il browser visualizza una colonna Stato . Mostra esattamente quale codice di stato è stato restituito dal server.

Altre risorse
Ci sono molte buone risorse che spiegano di più sui codici di stato HTTP. La pagina di Wikipedia intitolata Elenco dei codici di stato HTTP e questo documento ufficiale sugli standard del datatracker sono buoni punti di partenza.
Il riferimento più utile potrebbe essere httpstatuses.com . Spiega tutti i codici di stato HTTP in un formato conciso e di facile comprensione. Fornisce anche utili dettagli sul codice che possono tornare utili quando si programma qualcosa che ha a che fare con HTTP.
Il formato degli URL httpstatuses è particolarmente utile. La pagina per il codice di stato 403 è semplicemente https://httpstatuses.com/403 . Puoi facilmente modificare l’URL per cercare qualsiasi codice di stato di cui hai bisogno.

Gli stati HTTP fanno funzionare il Web
Il codice di stato HTTP è un semplice numero di tre cifre che la maggior parte delle persone sperimenta sotto le spoglie del 404. Ma è molto più potente di così, ei codici di stato supportano un’ampia gamma di comportamenti.
HTTP2 è la prossima versione di HTTP, ma la buona notizia è che i codici di stato rimangono gli stessi. Tutto ciò che hai imparato qui sarà ancora rilevante per il prossimo futuro.