I codici di stato sono brevi messaggi che un web server eventualmente restituisce alla richiesta di una pagina web, che si tratti della pagina “index” di un sito, quindi semplicemente richiesta nel momento in cui digitiamo l’indirizzo del dominio dal nostro blowser, oppure una determinata pagina richiesta tramite link.

Questi messaggi vengono restituiti ogni volta che il vostro browser interagisce con un server, anche se non li vedete. Se siete il proprietario o lo sviluppatore di un sito web, la comprensione dei codici di stato HTTP è fondamentale.

Quando compaiono, i codici di stato HTTP sono uno strumento importante per la diagnosi e la correzione degli errori di configurazione di un sito o di un piano di hosting (la configurazione PHP per esempio).

Come funzionano i codici di stato HTTP

Ogni volta che si seleziona un link o viene digitato un URL, il browser invia una richiesta al server web per il sito a cui si sta cercando di accedere. Il server riceve ed elabora la richiesta, quindi invia le relative risorse insieme ad un header HTTP.

I codici di stato HTTP vengono consegnati al browser nell’intestazione HTTP. Sebbene i codici di stato vengono restituiti ogni volta che il browser richiede una pagina web o una risorsa, il più delle volte non si vedono.

Normalmente è possibile vederli nel browser solo quando qualcosa va storto, questo è il modo di dire del server: “C’è qualcosa che non va”. Ecco quindi un codice che spiega cosa è successo”.

Le Classi

I codici di stato HTTP sono suddivisi in 5 “classi”. Si tratta di raggruppamenti di risposte che hanno significati simili o correlati. Sapere cosa sono può aiutarvi a determinare rapidamente la sostanza generale di un codice di stato prima di andare a cercare il suo significato specifico.

Le 5 classi sono:

  • 100:  codici informativi indicano che la richiesta avviata dal browser sta continuando.
  • 200: codici di successo restituiti quando la richiesta del browser è stata ricevuta, compresa ed elaborata dal server.
  • 300: codici di reindirizzamento vengono restituiti quando una nuova risorsa sostituisce la risorsa richiesta.
  • 400: codici di errore del client che indicano che c’è stato un problema con la richiesta.
  • 500: codici di errore del server che indicano che la richiesta è stata accettata, ma che un errore sul server ha impedito il completamento della richiesta, dove per errore del server non significa che non funziona, spesso significa che è necessario configurare determinate funzioni, modificarle o aggiornarle dal proprio pannello di gestione del piano di hosting (Plesk o cPanel per esempio)

All’interno di ciascuna di queste classi, esistono diversi codici che possono essere restituiti dal server. Ogni singolo codice ha un significato specifico e unico, che tratteremo nell’elenco più completo che segue

Codici di stato 100

Un codice di stato di livello 100 dice che la richiesta che avete fatto al server è ancora in corso per qualche motivo. Non è necessariamente un problema, sono solo informazioni extra per farvi sapere cosa sta succedendo.

  • 100: “Continue”. Ciò significa che il server in questione ha ricevuto gli header della richiesta del vostro browser ed è ora pronto per l’invio anche del body della richiesta. Ciò rende il processo di richiesta più efficiente, perché impedisce al browser di inviare la richiesta del body anche se le intestazioni sono state rifiutate.
  • 101: “Switching protocols”. Il vostro browser ha chiesto al server di cambiare i protocolli, e il server si è conformato.
  • 103: “Early hints”. Questo restituisce alcuni header di risposta prima che il resto della risposta del server sia pronto.

Codici di stato 200

Questo è il miglior tipo di codice di stato HTTP che possiate ricevere. Una risposta di livello 200 significa che tutto funziona esattamente come dovrebbe.

  • 200: “Everything is OK”. Questo è il codice che viene consegnato quando una pagina web o una risorsa si comporta esattamente come ci si aspetta.
  • 201: “Created”. Il server ha soddisfatto la richiesta del browser e, di conseguenza, ha creato una nuova risorsa.
  • 202: “Accepted”. Il server ha accettato la richiesta del vostro browser ma la sta ancora elaborando. In ultima analisi, la richiesta può portare o meno ad una risposta completa.
  • 203: “Non-Authoritative Information”. Questo codice di stato può apparire quando un proxy è in uso. Significa che il server proxy ha ricevuto un codice di stato di 200 “Everything is OK” dal server di origine, ma ha modificato la risposta prima di trasmetterla al browser.
  • 204: “No Content”. Questo codice significa che il server ha elaborato la richiesta con successo, ma non restituirà alcun contenuto.
  • 205: “Reset Content”. Come un codice 204, questo significa che il server ha elaborato la richiesta ma non restituirà alcun contenuto. Tuttavia, richiede anche che il browser reimposti la visualizzazione del documento.
  • 206: “Partial Content”. Potete vedere questo codice di stato se il vostro client HTTP (il vostro browser) utilizza ‘range header’. Ciò consente al browser di riprendere i download in pausa e di suddividere un download in più flussi. Un codice 206 viene inviato quando un range header fa sì che il server invii solo una parte della risorsa richiesta.

Codici di stato 300

Il reindirizzamento è la procedura utilizzata per comunicare che una risorsa è stata spostata in una nuova location. Ci sono diversi codici di stato HTTP che accompagnano i redirect, al fine di fornire ai visitatori informazioni su dove trovare il contenuto che stanno cercando.

  • 300: “Multiple Choices”. A volte, ci possono essere più risorse con cui il server può rispondere per soddisfare la richiesta del vostro browser. Un codice di stato 300 significa che il vostro browser deve ora scegliere tra queste. Questo può accadere quando ci sono più estensioni di tipi di file a disposizione, o se il server sta sperimentando la disambiguazione del senso delle parole.
  • 301: “The requested resource has been moved permanently”. Questo codice viene consegnato quando una pagina web o una risorsa è stata sostituita in modo permanente con una risorsa diversa. Viene utilizzato per il redirect permanente degli URL.
  • 302: “The requested resource has moved, but was found”. Questo codice viene utilizzato per indicare che la risorsa richiesta è stata trovata, ma non nel luogo previsto. Viene utilizzato per il reindirizzamento temporaneo degli URL.
  • 303: “See Other”. Per comprendere un codice di stato 303 è necessario conoscere la differenza tra i quattro metodi di richiesta HTTP primari. In sostanza, un codice 303 indica al vostro browser che ha trovato la risorsa richiesta proveniente dal browser tramite POST, PUT o DELETE. Tuttavia, per recuperarlo utilizzando GET, è necessario effettuare la richiesta appropriata a un URL diverso da quello utilizzato in precedenza.
  • 304: “The requested resource has not been modified since the last time you accessed it“. Questo codice indica al browser che le risorse memorizzate nella cache del browser non sono cambiate. Viene utilizzato per velocizzare la consegna delle pagine web riutilizzando le risorse precedentemente scaricate.
  • 307: “Temporary Redirect“. Questo codice di stato ha sostituito il 302 “Found” come azione appropriata quando una risorsa è stata temporaneamente spostata in un URL diverso. A differenza del codice di stato 302, non permette di cambiare il metodo HTTP.
  • 308: “Permanent Redirect”. Il codice di stato 308 è il successore del codice 301 “Moved Permanently”. Non consente di modificare il metodo HTTP e indica che la risorsa richiesta si trova ora permanentemente in un nuovo URL.

Codici di stato 400

A livello 400, i codici di stato HTTP iniziano a diventare problematici. Si tratta di codici di errore che specificano che c’è un errore nel browser e/o nella richiesta.

  • 400: “Bad Request”. Il server non può restituire una risposta a causa di un errore del client.
  • 401: “Unauthorized” o “Authorization Required”. Questo viene restituito dal server quando la risorsa di destinazione manca di credenziali di autenticazione valide. Potreste vederlo se avete impostato l’autenticazione HTTP di base usando htpasswd.
  • 402: “Payment Required”. Originariamente, questo codice era stato creato per essere utilizzato come parte di un sistema di cash digitale. Tuttavia, quel piano non è mai andato in porto. Invece, viene utilizzato da diverse piattaforme per indicare che una richiesta non può essere soddisfatta, di solito a causa della mancanza di fondi necessari. I casi più comuni includono:Avete raggiunto il vostro limite di richieste giornaliere per le API di Google Developers
  • 403: “Access to that resource is forbidden”. Questo codice viene restituito quando un utente tenta di accedere a qualcosa che non ha il permesso di visualizzare. Ad esempio, cercare di raggiungere contenuti protetti da password senza effettuare il login
  • 404: “The requested resource was not found”. Questo è il messaggio di errore più comune di tutti. Questo codice significa che la risorsa richiesta non esiste e il server non sa se è mai esistita (link sbagliato, per esempio)
  • 405: “Method not allowed“. Questo viene generato quando il server di hosting (server di origine) supporta il metodo ricevuto, ma la risorsa di destinazione no.
  • 406: “Not acceptable response“. La risorsa richiesta è in grado di generare solo contenuti non accettabili secondo le intestazioni di accettazione inviate nella richiesta.
  • 407: “Proxy Authentication Required”. Un server proxy è in uso e richiede al vostro browser di autenticarsi prima di continuare.
  • 408: “The server timed out waiting for the rest of the request from the browser”. Questo codice viene generato quando un server va in time out in attesa della richiesta completa da parte del browser. In altre parole, il server non ha ricevuto la richiesta completa inviata dal browser. Una possibile causa potrebbe essere la congestione della rete con conseguente perdita di pacchetti di dati tra il browser e il server.
  • 409: “Conflict”. Un codice di stato 409 significa che il server non è in grado di elaborare la richiesta del vostro browser perché c’è un conflitto con la risorsa in questione. Questo a volte avviene a causa di più modifiche simultanee.
  • 410: “The requested resource is gone and won’t be coming back”. Questo è simile a un codice 404 “Not Found”, tranne per il fatto che un 410 indica che la condizione è prevista e permanente.
  • 411: “Length Required”. Ciò significa che la risorsa richiesta richiede che il client specifichi una certa lunghezza e che non l’ha fatto.
  • 412: “Precondition Failed”. Il vostro browser ha incluso alcune condizioni nelle sue intestazioni di richiesta e il server non ha soddisfatto tali specifiche.
  • 413: “Payload Too Large” o “Request Entity Too Large”. La vostra richiesta è più grande di quanto il server sia disposto o in grado di elaborare.
  • 414: “URI Too Long”. Questo è di solito il risultato di una richiesta GET che è stata codificata come una query string troppo grande per essere elaborata dal server.
  • 415: “Unsupported Media Type”. La richiesta include un tipo di supporto che il server o la risorsa non supporta.
  • 416: “Range Not Satisfiable”. La vostra richiesta era per una parte di una risorsa che il server non è in grado di restituire.
  • 417: “Expectation Failed”. Il server non è in grado di soddisfare i requisiti specificati nel campo di intestazione della richiesta.
  • 422: “Unprocessable Entity”. La richiesta del client contiene errori semantici e il server non può elaborarla.
  • 425: “Too Early”. Questo codice viene inviato quando il server non è disposto ad elaborare una richiesta perché potrebbe essere ritrasmessa.
  • 426: “Upgrade Required”. A causa del contenuto del campo upgrade header, il client dovrebbe passare a un protocollo diverso.
  • 428: “Precondition Required”. Il server richiede che le condizioni siano specificate prima di elaborare la richiesta.
  • 429: “Too many requests”. Questo viene generato dal server quando l’utente ha inviato troppe richieste in un determinato lasso di tempo (rate-limiting). Questo a volte può accadere a causa di bot o di script che tentano di accedere al vostro sito.
  • 431: “Request Header Fields Too Large”. Il server non può elaborare la richiesta perché i campi dell’intestazione sono troppo grandi. Questo può indicare la presenza di un problema con un singolo campo di intestazione, o tutti insieme.
  • 451: “Unavailable for Legal Reasons”. Il gestore del server ha ricevuto la richiesta di vietare l’accesso alla risorsa da voi richiesta (o a un insieme di risorse, compresa quella da voi richiesta).
  • 499: “Client closed request”. Questo viene restituito da NGINX quando il cliente chiude la richiesta mentre Nginx la sta ancora elaborando

Codici di stato 500

Anche i codici di stato di livello 500 sono considerati errori. Tuttavia, questi codici indicano che il problema è dalla parte del server. Questo può renderli più difficili da rimuovere.

  • 500: “There was an error on the server and the request could not be completed”. Si tratta di un codice generico che significa semplicemente “errore interno del server”. Qualcosa è andato storto sul server e la risorsa richiesta non è stata consegnata. Questo codice è tipicamente generato da plugin di terze parti, da PHP difettoso o non configurato correttamente, o anche dalla interruzione della connessione al database
  • 501: “Not Implemented”. Questo errore indica che il server non supporta le funzionalità necessarie per soddisfare la richiesta. È quasi sempre un problema dello stesso server web, e di solito deve essere risolto dal provider
  • 502: “Bad Gateway”. Questo codice di errore significa normalmente che un server ha ricevuto una risposta non valida da un altro, ad esempio quando è in uso un server proxy. Altre volte una query o una richiesta richiede troppo tempo, e quindi viene annullata o uccisa dal server e la connessione al database si interrompe
  • 503: “The server is unavailable to handle this request right now”. La richiesta non può essere completata in questo momento. Questo codice può essere restituito da un server sovraccarico che non è in grado di gestire ulteriori richieste
  • 504: “The server, acting as a gateway, timed out waiting for another server to respond”. Questo è il codice restituito quando ci sono due server coinvolti nell’elaborazione di una richiesta, e il primo server si interrompe in attesa della risposta del secondo server
  • 505: ““HTTP Version Not Supported”. Il server non supporta la versione HTTP utilizzata dal client per effettuare la richiesta.
  • 508: “Resource Limit Is Reached” significa che sono stati raggiunti i limiti delle risorse impostati dal vostro provider opure dal vostro pannello di gestione (Plesk o cPanel).
  • 511: “Network Authentication Required”. Questo codice di stato viene inviato quando la rete che si sta cercando di utilizzare richiede una qualche forma di autenticazione prima di inviare la richiesta al server. Ad esempio, potrebbe essere necessario accettare i Termini e Condizioni di un hotspot Wi-Fi pubblico.
  • 521: “Web server is down”. L’errore 521 è un messaggio di errore specifico di Cloudflare. Significa che il vostro browser web è stato in grado di connettersi con successo a Cloudflare, ma Cloudflare non è stato in grado di connettersi al server web di origine.
  • 525: “SSL Handshake Failed”. L’errore 525 significa che l’handshake SSL tra un dominio che utilizza Cloudflare e il server web di origine è fallita
In breve