Ogni volta che navighiamo su internet, digitiamo un URL o clicchiamo su un link, avviene una conversazione silenziosa tra il nostro browser (client) e il server che ospita i contenuti. Questo dialogo avviene tramite il protocollo HTTP e si basa su risposte numeriche precise: i codici di stato HTTP.
I codici sono composti da tre cifre e sono divisi in cinque classi principali:
- 1xx (Informativi): richiesta ricevuta, il processo continua
- 2xx (Successo): l’azione è stata ricevuta, compresa e accettata
- 3xx (Reindirizzamento): sono necessarie ulteriori azioni per completare la richiesta
- 4xx (Errore del Client): la richiesta contiene sintassi errata o non può essere soddisfatta dal client
- 5xx (Errore del Server): il server ha fallito nel soddisfare una richiesta apparentemente valida
I codici più comuni ed essenziali
I codici di stato HTTP ufficiali registrati da IANA (Internet Assigned Numbers Authority) sono 63 anche se nella pratica quotidiana dello sviluppo web e della SEO se ne utilizzano attivamente meno di una ventina. Vediamo quelli principali
2xx (Successo)
- 200 – OK: è lo standard universale che indica il successo di una richiesta HTTP. Indica che il server ha ricevuto la richiesta dal browser (o da un’app), l’ha elaborata senza errori e ha inviato i dati richiesti nel corpo della risposta
- 201 – Created: è la risposta standard di successo che indica che una richiesta ha portato alla creazione di una nuova risorsa sul server. Viene inviato quasi esclusivamente dopo una richiesta POST o PUT, ad esempio, quando un utente si registra a un sito, pubblica un nuovo post sui social o aggiunge un record in un database
- 202 – Accepted: indica che la richiesta è stata ricevuta correttamente ed è valida, ma l’elaborazione non è ancora stata completata. A differenza del 200 OK o del 201 Created, che confermano l’esito immediato dell’operazione, il 202 è per sua natura asincrono e viene impiegato in scenari dove il server non può rispondere istantaneamente perché l’operazione è lunga o delegata a un altro processo
- 204 – No content: indica che la richiesta è stata completata con successo, ma il server non deve restituire alcun contenuto nel corpo della risposta. Generalmente è utilizzato nelle architetture API moderne per ottimizzare il traffico dati, poiché conferma l’avvenuta operazione senza sprecare banda per inviare dati non necessari
3xx (Reindirizzamento)
- 301 Moved Permanently: indica che la risorsa richiesta è stata spostata in modo definitivo a un nuovo indirizzo (URL) e rappresenta lo strumento più potente per gestire i cambiamenti di struttura di un sito web
- 302 Found: indica che la risorsa richiesta è stata spostata temporaneamente a un nuovo indirizzo (URL)
4xx (Errore del Client)
- 400 Bad Request: indica che il server non può elaborare la richiesta a causa di un errore del client. Il server restituisce questo codice quando la richiesta ricevuta non rispetta le regole previste, ad esempio sintassi non valida, dati mancanti o errati, dimensioni eccessive, URL malformati o cookie corrotti
- 401 Unauthorized: indica che la richiesta non è stata completata perché non sono state fornite le credenziali di autenticazione valide
- 403 Forbidden: indica che il server ha ricevuto la richiesta, riconosce l’utente, ma non autorizza l’accesso alla risorsa. Le cause principali sono ad esempio permessi insufficienti, restrizioni IP, protezione delle cartelle, etc…
- 404 Not Found: è probabilmente il più conosciuto e indica che il server non è riuscito a trovare la risorsa richiesta all’indirizzo (URL) specificato. Si può verificare per URL errate, rimozione dei contenuti o errori di configurazione
- 408 Request Timeout: indica che il server è andato in timeout nell’attesa di ricevere la richiesta completa dal client (browser o app). Con le connettività attuali questo errore è meno frequente ma rimane un segnale critico di connessione instabile o di problemi di latenza nella comunicazione di rete
- 429 Too Many Requests: indica che l’utente (o un software) ha inviato troppe richieste al server in un determinato lasso di tempo. Il server attiva questo blocco per diversi motivi protettivi, ad esempio la prevenzione da attacchi DDoS
5xx (Errore del Server)
- 500 Internal Server Error: è una risposta di errore generica che indica che il server ha riscontrato una condizione imprevista che gli impedisce di completare la richiesta. Poiché si tratta di un errore interno, il problema risiede quasi sempre nel codice o nella configurazione del sito, non nel computer dell’utente.
- 501 Not Implemented: indica che il server non supporta la funzionalità necessaria per soddisfare la richiesta. Mentre l’errore 500 indica che il server “sa come fare una cosa ma ha fallito”, il 501 indica che il server “non sa come gestire quella richiesta”. In genere, questo errore è legato al metodo HTTP utilizzato nella richiesta (come GET, POST, PUT, DELETE, ecc.)
- 502 Bad Gateway: indica che un server, agendo come gateway o proxy, ha ricevuto una risposta non valida da un altro server nel tentativo di soddisfare la richiesta
- 503 Service Unavailable: indica che il server non è temporaneamente in grado di gestire la richiesta. Rappresenta il metodo corretto per la gestione della manutenzione e della scalabilità, poiché comunica in modo intelligente sia agli utenti che ai motori di ricerca che il disservizio è solo momentaneo ma può essere causato anche da un sovraccarico del server o da un problema di un servizio infrastrutturale
- 504 Gateway Timeout: indica che un server, agendo come gateway o proxy, non ha ricevuto una risposta tempestiva da un altro server necessario per completare la richiesta. Le cause principali possono essere query al database lente, script lenti, sovraccarico del server o problemi di rete interna
In conclusione, i codici di stato HTTP rappresentano il fondamento della comunicazione digitale. Saperli interpretare correttamente non è solo un requisito tecnico per sviluppatori, ma un vantaggio strategico per chiunque operi online. Inoltre, la capacità di diagnosticare e risolvere tempestivamente questi segnali permette di mantenere un’infrastruttura solida, sicura e performante.
