Cosa sono i codici di stato HTTP

Il codice di stato HTTP è la prima informazione che il server restituisce al browser, a un crawler o a un’app: tre cifre che dicono se la richiesta è riuscita, se la risorsa si trova altrove o perché il server non è riuscito a restituirla. Accanto al numero c’è una breve frase descrittiva, la reason phrase (“OK”, “Not Found”), che però non ha valore tecnico: i client si basano solo sul numero.

Il testo di riferimento è la RFC 9110 “HTTP Semantics” del giugno 2022, che ha riunito in un solo documento le regole prima sparse in più RFC e vale per HTTP/1.1, HTTP/2 e HTTP/3. La RFC divide i codici in cinque classi in base alla prima cifra:

ClasseSignificatoEsempi
1xxInformativa: la richiesta è stata ricevuta, l’elaborazione continua100, 101
2xxSuccesso: richiesta ricevuta, compresa e accettata200, 201, 204
3xxReindirizzamento: serve un’altra azione per completare la richiesta301, 302, 304, 307, 308
4xxErrore del client: la richiesta è sbagliata o non può essere soddisfatta400, 401, 403, 404, 410, 429
5xxErrore del server: la richiesta sembrava valida ma il server non è riuscito a gestirla500, 502, 503, 504

Un client che riceve un codice sconosciuto lo tratta come il codice x00 della sua classe: un ipotetico 499 equivale a un 400, un 599 a un 500.

Come vedere il codice di stato di una pagina

  1. Apri lo strumento header HTTP e incolla l’indirizzo completo della pagina, con https://.
  2. Avvia il controllo e leggi la prima riga della risposta: contiene il codice, per esempio 200 o 301.
  3. Se il codice è un 3xx, segui l’intestazione Location fino alla risposta finale e conta i passaggi.
  4. Se è un 4xx o un 5xx, controlla dal test sito online se l’errore si ripete anche da un altro punto della rete.

Codici 2xx: la richiesta è andata a buon fine

I codici 2xx confermano che il server ha ricevuto e accettato la richiesta. Per una pagina web il valore atteso è quasi sempre 200.

  • 200 OK: la richiesta è riuscita e il corpo della risposta contiene la risorsa. Un 200 non garantisce che la pagina mostri il contenuto giusto: un sito che mostra “pagina non trovata” con codice 200 genera i cosiddetti soft 404, che Google segnala in Search Console.
  • 201 Created: è stata creata una nuova risorsa, tipico delle API dopo un invio con POST.
  • 204 No Content: richiesta riuscita, nessun contenuto da restituire. Lo usano le API e i moduli che salvano dati senza cambiare pagina.

Codici 3xx: redirect permanenti e temporanei

Un codice 3xx dice al client che la risorsa va cercata a un altro indirizzo, indicato nell’intestazione Location. La scelta tra un redirect permanente e uno temporaneo cambia il modo in cui browser e motori di ricerca memorizzano il nuovo indirizzo.

CodiceTipoIl metodo può cambiare?Quando usarlo
301 Moved PermanentlyPermanenteSì, da POST a GETCambio di dominio, passaggio a HTTPS, URL rinominati
302 FoundTemporaneoSì, da POST a GETPagina spostata per un periodo, test, manutenzione
303 See OtherRimanda a un’altra risorsaSempre GETPagina di conferma dopo l’invio di un modulo
307 Temporary RedirectTemporaneoNoCome il 302, quando metodo e corpo vanno conservati
308 Permanent RedirectPermanenteNoCome il 301, quando metodo e corpo vanno conservati

Per le pagine web 301 e 308 si equivalgono, perché il browser le richiede comunque con GET. La differenza conta per le API: con un 301 un client può rifare la richiesta POST come GET e perdere i dati inviati, con un 308 no.

Il 304 Not Modified non è un vero reindirizzamento. Il browser chiede una risorsa che ha già in cache, indicando con If-None-Match o If-Modified-Since la versione che possiede, e il server risponde che non è cambiata: il browser usa la copia locale e non riscarica nulla.

Secondo Google Search Central, un redirect permanente è un segnale forte che il nuovo URL è quello da mostrare nei risultati, uno temporaneo è un segnale debole. Evita le catene: ogni passaggio aggiunge una richiesta e, secondo la stessa documentazione, i crawler di Google seguono al massimo 10 redirect consecutivi. Con lo strumento header HTTP vedi tutta la sequenza di redirect di un indirizzo.

Codici 4xx: errori lato client

I codici 4xx indicano che il problema sta nella richiesta: indirizzo inesistente, permessi mancanti, troppe richieste. Se ripeti la richiesta identica, di solito ottieni lo stesso errore.

  • 400 Bad Request: richiesta malformata. Capita con URL troppo lunghi, caratteri non validi o cookie corrotti: cancellare i cookie del sito risolve spesso il problema.
  • 401 Unauthorized: serve un’autenticazione. Il server invia l’intestazione WWW-Authenticate e il browser mostra la richiesta di nome utente e password.
  • 403 Forbidden: il server ha capito la richiesta ma rifiuta di soddisfarla. Le cause tipiche sono permessi dei file sbagliati, una regola del firewall applicativo o un blocco per paese o indirizzo IP.
  • 404 Not Found: la risorsa non esiste a quell’indirizzo, o il server preferisce non dirlo. Non dice se l’assenza è temporanea o definitiva: la pagina potrebbe tornare.
  • 405 Method Not Allowed: il metodo, per esempio POST, non è accettato su quella risorsa. Il server deve indicare i metodi ammessi nell’intestazione Allow.
  • 410 Gone: la risorsa è stata rimossa in modo intenzionale e permanente. Comunica una cosa diversa dal 404, che non dice nulla sulla durata.
  • 429 Too Many Requests: il client ha superato il limite di richieste. Definito dalla RFC 6585 dell’aprile 2012, può includere Retry-After con i secondi da attendere.

Per Google 404 e 410 hanno un effetto simile: l’URL esce dall’indice e viene scansionato sempre meno spesso. Un 404 su una pagina che non è mai esistita non è un problema da correggere. Lo diventa se la pagina aveva link in entrata o traffico, e allora va reindirizzata con un 301 alla pagina più vicina per contenuto.

Codici 5xx: errori lato server

I codici 5xx dicono che la richiesta era valida ma il server, o un sistema a monte, non è riuscito a rispondere. Sono i codici da controllare per primi quando un sito “non va”.

CodiceCosa significaCause frequentiDove guardare
500 Internal Server ErrorErrore generico del serverErrore nel codice PHP o dell’applicazione, plugin difettoso, .htaccess con una direttiva sbagliataLog degli errori dell’hosting
502 Bad GatewayUn proxy o gateway ha ricevuto una risposta non valida dal server a montePHP-FPM o l’applicazione fermi, CDN che non raggiunge l’origineStato dei servizi sul server di origine
503 Service UnavailableServer temporaneamente non disponibileManutenzione, sovraccarico, limiti di risorse dell’hostingCarico del server, modalità manutenzione
504 Gateway TimeoutIl proxy non ha ricevuto risposta in tempo dal server a monteQuery lente, script che superano il tempo massimo, origine irraggiungibileTempi di risposta dell’applicazione e del database

Durante una manutenzione programmata usa il 503 con l’intestazione Retry-After, non una pagina di cortesia con codice 200. Google riduce la frequenza di scansione quando riceve 5xx e 429, e se gli errori continuano a lungo inizia a togliere gli URL dall’indice. Se la pagina dà errore solo a te, verifica con il test sito online se il sito risponde da un’altra rete e con il tempo di risposta del sito quanto ci mette.

Come controllare il codice di stato e cosa fare

Il codice di stato non compare nella pagina: lo vedi con uno strumento che legge le intestazioni della risposta. Le strade più rapide sono tre.

  1. Lo strumento header HTTP di questo sito, che mostra codice, redirect e intestazioni dal punto di vista di un server esterno.
  2. Gli strumenti per sviluppatori del browser: premi F12, apri la scheda Rete (Network), ricarica la pagina e leggi la colonna Stato della prima riga.
  3. Il terminale: curl -I https://www.example.com/ stampa solo le intestazioni, con il codice sulla prima riga. Aggiungi -L per seguire i redirect.

Se il codice è 200 ma il sito non si apre, il problema non è HTTP: guarda il DNS con il DNS lookup o il certificato con la verifica SSL. Gli errori del certificato bloccano la connessione prima che il server possa rispondere con un codice: sono spiegati nella guida agli errori del certificato SSL.

Domande frequenti

Che differenza c’è tra redirect 301 e 302?

Il 301 indica uno spostamento permanente: browser e motori di ricerca memorizzano il nuovo indirizzo e Google lo usa come URL principale. Il 302 indica uno spostamento temporaneo: il vecchio indirizzo resta quello di riferimento. Per un cambio di dominio o il passaggio a HTTPS usa il 301 (o il 308).

Meglio 404 o 410 per una pagina eliminata?

Il 410 dichiara che la rimozione è voluta e definitiva, il 404 dice solo che la pagina non c’è. Per Google l’effetto è simile: in entrambi i casi l’URL esce dall’indice. Se la pagina aveva un’alternativa equivalente, un redirect 301 è meglio di entrambi.

Cosa significa errore 403 Forbidden?

Il server ha ricevuto la richiesta ma non ti autorizza ad accedere alla risorsa. Le cause più comuni sono permessi dei file sbagliati sul server, una regola di sicurezza che blocca il tuo indirizzo IP o il tuo paese, oppure l’accesso a una cartella senza pagina iniziale. Se il sito è tuo, controlla i log e le regole del firewall.

Il 502 Bad Gateway è colpa mia o del sito?

Quasi sempre del sito. Il 502 nasce tra due server: un proxy, una CDN o il web server non ha ricevuto una risposta valida dall’applicazione a monte. Ricarica la pagina dopo qualche minuto e controlla con il test sito online se l’errore compare anche da fuori.

Cos’è un soft 404?

È una pagina che mostra un messaggio di errore o un contenuto vuoto ma risponde con codice 200 invece di 404. Google la tratta come un errore e la segnala in Search Console. La soluzione è far restituire al server il codice corretto, 404 o 410, per le pagine che non esistono.

Fonti e riferimenti

Pagina aggiornata il