Non tutti conoscono i codici di stato HTTP, essendo parte della conoscenza tecnica di chi lavora nel web e non di uso comune. Bisogna comunque ammettere che, navigando tutti i giorni, è facile imbattersi in codici di risposta…in particolare se siamo anche un po’ sviluppatori e mettiamo mano al codice di un sito web.
Oggi scopriamo i principali codici di stato HTTP e impareremo a comprenderli.
COSA SONO I CODICI DI STATO HTTP?
La risposta è semplice, i codici di stato sono risposte chiare e rapide che un server dà ad ogni richiesta HTTP che riceve. Le richieste HTTP/HTTPS sono molteplici e ognuna ha i suoi codici di riferimento. La richiesta HTTP più normale è quella di chiedere ad un server di restituire la pagina web richiesta durante la navigazione, oppure il download di un file, un redirect ad altre fonti e così via.
Ogni codice è una determinata risposta ad una richiesta pervenuta, sia esso di errore o meno (normalmente sono usati per la gestione degli errori più che per indicare che è tutto ok). In questo modo risulta molto più semplice capire cosa sta succedendo nel dietro le quinte delle richieste al server, in particolare per gli sviluppatori.
I codici di stato sono composti da 3 numeri, organizzati dal numero per le centinaia, ad esempio:
- 1xx: i codici che iniziano con 1 sono codici informativi e indicano spesso che la richiesta è stata ricevuta e che si può continuare la comunicazione (lato server/client).
- 2xx: i codici che iniziano con 2 rappresentano codici di successo, cioè che quello che è stato richiesto è stato portato a termine con successo o che ci sono piccole differenze rispetto alla richiesta iniziale. 200 è ad esempio la risposta per dire “OK”, sempre presente in caso di richiesta esaudita con successo.
- 3xx: i codici che iniziano con 3 rappresentano codici di redirect, cioè che le risorse cercate sono state trasferite altrove e quindi il client (noi che navighiamo) deve fare altre operazioni prima di completare la richiesta. Il più famoso è il codice 301.
- 4xx: i codici che iniziano con 4 rappresentano i codici di errore client. La differenza tra client (il mio computer) e server (il computer verso cui mi connetto) è importante perchè permette di capire dove sta il problema e quindi come risolverlo senza perdere troppo tempo. Si dividono in tutta una serie di codici, da 400 a 499, che permettono di capire se una richiesta fatta dal client ha degli errori e quali sono, in dettaglio. In questo caso, il codice 404 è il più famoso, indicando che la risorsa richiesta non esiste o non è stata trovata.
- 5xx: i codici che iniziano con 5 rappresentano i codici di errore server. In questo caso i codici rappresentano errori lato server, cioè non risultano esserci problemi nella richiesta fatta dal client ma per qualche motivo il server non è riuscito a completarla. Il più famoso e odiato dagli sviluppatori in questo caso è il codice 500, che rappresenta un generico messaggio di errore lato server, senza nessun dettaglio circa il motivo che ha portato il server a non completare la richiesta.
Conoscerli, ci permette di capire al volo cosa sta succedendo e come possiamo risolvere un’errore durante la navigazione.
1xx: I CODICI INFORMATIVI
La prima parte della comunicazione tra client e server. I codici 1xx rappresentano informazioni circa la richiesta come ad esempio l’ok per continuare, le informazioni sul protocollo da utilizzare (HTTP/HTTPS) e via così. Sono i primi codici ad essere utilizzati e di solito non vengono mai visualizzati a video perchè eventuali errori vengono in fasi successive della richiesta.
2xx: RICHIESTA ESAUDITA CON SUCCESSO
Sono codici che indicano che la richiesta è stata completata e ha avuto successo, tra i vari codici 2xx si può comunicare che ci sono state differenze o piccole anomalie rispetto la richiesta iniziale. Tra tutti, il più importante è 200, conosciuto come “luce verde” dagli sviluppatori. Indica semplicemente “ok”, richiesta completata.
Altri codici possono indicare che la risposta alla richiesta è vuota (204), che al termine della richiesta è stata creata una nuova risorsa (201), che la risposta è incompleta (206) e via così.
3xx: DOVE TROVO LA MIA RISORSA?
Nel mondo web le risorse (documenti, url a siti ecc) possono cambiare in continuazione e i codici 3xx si occupano di questo, indicare al client dove è la risorsa che sta cercando per completare la richiesta. In pratica permettono di evitare il codice di errore 404 che indica “risorsa non trovata”, comunicando a priori al client che la risorsa è stata spostata o che si necessita di alcune operazioni prima di trovarla. Tra i più famosi ricordiamo:
- 301: redirect permanente, questa e tutte le successive richieste per questa risorsa devono andare al nuovo link. Utilissimo in ambito SEO per indicare a Google dove trovare le risorse dopo trasferimenti o altro.
- 302/303: redirect temporaneo, ci sono alcune differenze tra i due codici ma in sostanza dicono al client di usare temporaneamente altri indirizzi per arrivare alla risorsa.
4xx: CLIENT STAI SBAGLIANDO QUALCOSA
I codici 4xx e 5xx rappresentano esclusivamente errori, lato client (4xx) e server (5xx). In questo caso ci sono più codici perchè le problematiche possono essere molte e molto diverse tra loro. Vediamo qualche esempio tra i più famosi:
- 400: richiesta con errori di sintassi.
- 401: non si è autorizzati ad accedere alla risorsa (la richiesta è corretta ma l’autenticazione è fallita).
- 403: non si è autorizzati ad accedere alla risorsa, indipendentemente dal processo di autenticazione.
- 404: ormai una leggenda anche fuori dal mondo web, la risorsa non è stata trovata o non esiste.
Questi sono solo i principali, dobbiamo ricordarci che tra 400 e 500 sono tutti possibili codici di stato, ognuno con un differente motivo di esistere. In sostanza, quando ci troviamo di fronte ad uno di questi errori, bisogna comprendere che l’errore è nella richiesta del client verso il server, ovvero nella richiesta stessa, non conforme alle specifiche.
Essendo tra i problemi più comuni che un visitatore si trova davanti, quando il server restituisce un codice 404 normalmente fa un redirect dell’utente ad una certa pagina che spiega il problema. L’errore 404 è contornato di immagini e testi fantasiosi per spiegare e scusarsi con l’utente che c’è stato qualche problema nel trovare ciò che cerca.
5xx: L’INCUBO DEGLI SVILUPPATORI
Come ultimi, arriviamo ai codici di stato 5xx, responsabili di indicare che il server ha avuto problemi a completare la richiesta. In questo caso, apparentemente, il client ha fatto una richiesta valida quindi. Tra i più famosi troviamo:
- 500: un codice di errore generico, senza dettagli. C’è stato un’errore lato server nel completare la richiesta, trova l’errore 🙂 generalmente è un’errore nel codice da individuare con processi di debugging.
- 503: servizio non disponibile. Praticamente lo stesso del 500 ma di solito è temporaneo e dovuto a motivi esterni al codice.
- 505: versione HTTP non supportata. In sostanza il server non ha modo di ricevere e rispondere alla richiesta perchè non utilizza lo stesso protocollo HTTP (o comunque con una versione non compatibile). HTTP e HTTPS sono i protocolli con cui si trasmettono le richieste (tra gli altri), l’alfabeto della comunicazione web.
Anche in questo caso i numeri vanno da 500 a 599, lasciando spazio a tantissime situazioni e problematiche lato server.