W3docs

Messaggi di Stato HTTP

Riferimento ai codici di stato HTTP (1xx–5xx) con i più comuni spiegati e un esempio fetch() che si dirama su response.status.

Ogni volta che un browser carica una pagina, invia un modulo o il tuo JavaScript esegue una chiamata fetch(), il server risponde con un codice di stato HTTP a tre cifre. Questo codice indica al client se la richiesta è riuscita, è stata reindirizzata, è fallita a causa di qualcosa fatto dal client, o è fallita lato server. Il browser lo utilizza automaticamente — segue i reindirizzamenti, mostra la propria pagina di errore per alcuni codici e riutilizza il contenuto memorizzato nella cache per altri — ma come sviluppatore leggi questi codici anche direttamente: un modulo viene inviato e ti ramifichi in base alla risposta, oppure una fetch() si risolve e controlli response.ok (che è semplicemente "stato nell'intervallo 200–299").

Qui puoi trovare l'elenco dei codici di stato delle risposte del Protocollo di Trasferimento Ipertestuale (HTTP). Questi codici rispondono alla richiesta che un client fa a un server — che la richiesta utilizzi GET, POST o un altro metodo HTTP — e sono raggruppati in 5 classi in base alla prima cifra. Conoscerli ti aiuta a diagnosticare link interrotti, URL errati, invii di moduli falliti e risposte API inattese. Esaminiamo ogni classe:

Pericolo

Se ricevi una risposta non inclusa in questo elenco, significa che si tratta di una risposta non standard, forse personalizzata dal software del server.

Gestione dei codici di stato in JavaScript

Quando invii un modulo o chiami un API con fetch(), la richiesta ha successo (la promise si risolve) anche quando il server restituisce un errore 4xx o 5xx — un 404 o 500 è comunque una risposta HTTP valida, non un errore di rete. Devi quindi ispezionare tu stesso lo stato. La scorciatoia pratica è response.ok, che è true solo per l'intervallo 200–299; per qualsiasi altro caso ti ramifichi su response.status per reagire in modo appropriato:

const form = document.querySelector("#signup");

form.addEventListener("submit", async (event) => {
  event.preventDefault();

  const response = await fetch("/api/signup", {
    method: "POST",
    body: new FormData(form),
  });

  if (response.ok) {
    // 200–299: success
    window.location.href = "/welcome";
  } else if (response.status === 401) {
    showMessage("Please log in first.");
  } else if (response.status === 422) {
    // Validation errors returned as JSON
    const data = await response.json();
    showMessage(data.error);
  } else if (response.status === 429) {
    // Rate limited — respect the Retry-After header
    const wait = response.headers.get("Retry-After");
    showMessage(`Too many attempts. Try again in ${wait}s.`);
  } else if (response.status >= 500) {
    showMessage("Server error — please try again later.");
  } else {
    showMessage(`Unexpected error (${response.status}).`);
  }
});

Nota che fetch() rigetta solo in caso di problemi di rete genuini (nessuna connessione, blocco CORS, errore DNS), quindi racchiudere la chiamata in un try…catch gestisce quelli, mentre il blocco if/else sopra gestisce lo stato HTTP stesso.

Informazione

I codici più comuni da conoscere per primi. Se ne memorizzi solo una manciata, scegli questi: 200 (OK), 301 (Spostato Permanentemente), 302 (Trovato / reindirizzamento temporaneo), 401 (Non Autorizzato), 403 (Vietato), 404 (Non Trovato) e 500 (Errore Interno del Server). Coprono la grande maggioranza di ciò che vedrai negli strumenti di sviluppo del browser e nei log del server.

1xx: Informazione

Codice di statoMessaggioDescrizione
100ContinueIndica che il server ha ricevuto le intestazioni della richiesta e il client dovrebbe continuare a inviare il corpo della richiesta.
101Switching ProtocolsIndica che il client, che ha effettuato una richiesta, ha chiesto al server di cambiare protocollo (ad esempio, per aggiornare a una connessione WebSocket).
102ProcessingUn codice WebDAV che indica che il server ha accettato la richiesta ma non l'ha ancora completata; utilizzato per evitare che il client vada in timeout durante un'operazione lunga.
103Early HintsDefinito in RFC 8297. Consente al server di inviare alcune intestazioni di risposta (come intestazioni Link che precaricano risorse) prima della risposta finale, in modo che il browser possa iniziare prima a recuperare le risorse.

2xx: Successo

Codice di statoMessaggioDescrizione
200OKIndica che la richiesta è andata a buon fine. È la risposta standard per le richieste HTTP riuscite.
201CreatedIndica che la richiesta è stata soddisfatta e una nuova risorsa è stata creata.
202AcceptedIndica che la richiesta è stata accettata per l'elaborazione, ma l'elaborazione è in corso.
203Non-Authoritative InformationIndica che la richiesta è stata elaborata con successo, ma restituisce informazioni che potrebbero provenire da un'altra fonte.
204No ContentIndica che la richiesta è stata elaborata con successo, ma non restituisce alcun contenuto.
205Reset ContentIndica che la richiesta è stata elaborata, ma non restituisce alcun contenuto e richiede che chi ha fatto la richiesta ripristini la visualizzazione del documento.
206Partial ContentIndica che il server fornisce solo una parte della risorsa, a causa di un'intestazione range inviata dal client.

3xx: Reindirizzamento

Codice di statoMessaggioDescrizione
300Multiple ChoicesIndica più opzioni per la risorsa che il client può seguire.
301Moved PermanentlyIndica che la pagina è stata spostata definitivamente a un nuovo URL. I browser e i motori di ricerca aggiornano i loro riferimenti, quindi un 301 trasferisce il valore del link al nuovo URL ed è la scelta corretta per i reindirizzamenti ottimizzati per SEO.
302FoundIndica che la pagina richiesta è stata temporaneamente spostata a un nuovo URL. I motori di ricerca mantengono indicizzato l'URL originale, quindi usa 302 (non 301) quando lo spostamento è temporaneo, ad esempio durante la manutenzione o i test A/B.
303See OtherIndica che la risposta alla richiesta può essere trovata a un altro URL, che il client dovrebbe recuperare con GET. Comunemente usato dopo un POST di un modulo per reindirizzare a una pagina di risultati.
304Not ModifiedIndica che la risorsa richiesta non è stata modificata dall'ultima volta che è stata memorizzata nella cache. Il server non invia alcun corpo, quindi il browser riutilizza la sua copia memorizzata nella cache — questo risparmia larghezza di banda e velocizza le visite ripetute.
307Temporary RedirectIndica che la pagina richiesta è stata temporaneamente spostata a un nuovo URL. A differenza del 302, il client deve mantenere il metodo di richiesta originale (un POST rimane un POST).
308Permanent RedirectIndica che la risorsa richiesta è stata spostata definitivamente a un nuovo URL.

I codici non elencati qui (come 305 e 306) sono deprecati, rari o specifici di alcune estensioni.

4xx: Errore del Client

Codice di statoMessaggioDescrizione
400Bad RequestIndica che la richiesta non può essere soddisfatta a causa di una sintassi errata o di dati non validi.
401UnauthorizedIndica che il client non è autenticato — le credenziali valide sono assenti o errate. Il server non sa ancora chi sei, quindi ti chiede di accedere. (Nota: il nome dice "Non Autorizzato" ma significa davvero "Non Autenticato".)
402Payment RequiredÈ riservato per uso futuro.
403ForbiddenIndica che il client è autenticato ma non autorizzato — il server sa chi sei, ma non hai il permesso per questa risorsa. A differenza del 401, inviare di nuovo le credenziali non sarà di aiuto.
404Not FoundIndica che la pagina richiesta non è al momento disponibile, ma potrebbe tornare disponibile in futuro.
405Method Not AllowedIndica che la richiesta è stata effettuata a una pagina che utilizza un metodo di richiesta non supportato per quella pagina.
406Not AcceptableIndica che il server può generare solo una risposta che il client non accetta.
407Proxy Authentication RequiredIndica che il client deve prima autenticarsi presso il proxy.
408Request TimeoutIndica che il server ha esaurito il tempo di attesa per la richiesta.
409ConflictIndica che la richiesta non può essere completata a causa di un conflitto nella richiesta.
410GoneIndica che la pagina richiesta non è più disponibile.
411Length RequiredIndica che la lunghezza del contenuto non è definita e il server non accetterà la richiesta senza di essa.
412Precondition FailedIndica che una precondizione fornita nella richiesta è valutata come falsa dal server.
413Request Entity Too LargeIndica che l'entità della richiesta è troppo grande e per questo il server non accetterà la richiesta.
414Request-URI Too LongIndica che l'URL è troppo lungo e per questo il server non accetterà la richiesta. Accade quando si converte una richiesta POST in una richiesta GET con molte informazioni nella query.
415Unsupported Media TypeIndica che il tipo di media non è supportato e per questo il server non accetterà la richiesta.
416Requested Range Not SatisfiableIndica che il client ha richiesto una parte del file ma il server non è in grado di fornire quella parte.
417Expectation FailedIndica che il server non può soddisfare i requisiti del campo intestazione della richiesta Expect.
418I'm a TeapotUn codice scherzoso dall'RFC 2324 (il Hyper Text Coffee Pot Control Protocol). Non è un vero errore, ma alcune API lo restituiscono deliberatamente, quindi potresti incontrarlo in situazioni reali.
422Unprocessable ContentIndica che la richiesta era ben formata ma contiene errori semantici che ne impediscono l'elaborazione — comunemente restituito dalle API quando i dati di un modulo o JSON non superano la validazione.
429Too Many RequestsIndica che il client ha inviato troppe richieste in un dato periodo di tempo ("rate limiting"). La risposta include spesso un'intestazione Retry-After che indica quanto tempo attendere prima di riprovare.
451Unavailable For Legal ReasonsIndica che la risorsa richiesta non è disponibile per motivi legali, come la censura o un ordine di rimozione (il numero fa riferimento al romanzo Fahrenheit 451).

I codici non elencati qui (come 419, 420 e diversi nell'intervallo 423–431) sono rari, specifici di framework o non standard. Alcuni — come il 421 (Misdirected Request, utilizzato in HTTP/2) e il 451 sopra — sono standardizzati ma non comuni nel lavoro quotidiano.

5xx: Errore del Server

Codice di statoMessaggioDescrizione
500Internal Server ErrorÈ un errore generico e gli utenti ricevono questo messaggio di errore quando non esiste un messaggio specifico più adeguato.
501Not ImplementedIndica che il server non riconosce il metodo di richiesta o non è in grado di soddisfare la richiesta.
502Bad GatewayIndica che un server che funge da gateway, reverse proxy o load balancer ha ricevuto una risposta non valida dal server applicativo upstream — spesso perché quel backend è andato in crash o ha restituito un output malformato.
503Service UnavailableIndica che il server è temporaneamente impossibilitato a gestire la richiesta (sovraccaricato o in manutenzione). Come il 429, la risposta può includere un'intestazione Retry-After che indica a client e crawler quando riprovare, motivo per cui il 503 è il codice SEO-sicuro da usare durante i periodi di inattività pianificati.
504Gateway TimeoutIndica che un server che funge da gateway, reverse proxy o load balancer non ha ricevuto in tempo una risposta dal server upstream. Indica un backend lento o non raggiungibile piuttosto che il proxy stesso.
505HTTP Version Not SupportedIndica che la versione del protocollo HTTP utilizzata nella richiesta non è supportata dal server.
507Insufficient StorageUn codice WebDAV che indica che il server non può memorizzare la rappresentazione necessaria per completare la richiesta (è esaurito lo spazio di archiviazione).
508Loop DetectedUn codice WebDAV che indica che il server ha rilevato un ciclo infinito durante l'elaborazione della richiesta e l'ha terminata.
511Network Authentication RequiredIndica che il client deve autenticarsi per ottenere l'accesso alla rete (spesso visibile dietro Wi-Fi con portale captive).

Capitoli Correlati

Lo stato restituito da un server dipende spesso dalla richiesta stessa. Per approfondire, consulta:

  • Metodi HTTP — GET, POST e altri, che determinano come si comportano alcuni reindirizzamenti (302 vs 307).
  • Moduli HTML — come gli invii di moduli attivano richieste che possono restituire 303, 422 o 429.
  • URL HTML (Uniform Resource Locators) — gli indirizzi a cui puntano i reindirizzamenti 3xx e le risposte 404.

Pratica

Pratica
Un utente autenticato richiede una pagina che non è autorizzato a visualizzare. Quale codice di stato dovrebbe restituire il server?
Un utente autenticato richiede una pagina che non è autorizzato a visualizzare. Quale codice di stato dovrebbe restituire il server?
Pratica
Sposti definitivamente una pagina a un nuovo URL e vuoi che i motori di ricerca trasferiscano i segnali di posizionamento al nuovo indirizzo. Quale codice di reindirizzamento dovresti usare?
Sposti definitivamente una pagina a un nuovo URL e vuoi che i motori di ricerca trasferiscano i segnali di posizionamento al nuovo indirizzo. Quale codice di reindirizzamento dovresti usare?
Pratica
Un invio POST di un modulo ha successo e il server vuole indicare al browser di cancellare i campi del modulo senza inviare nuovo contenuto della pagina. Quale codice di stato si adatta meglio?
Un invio POST di un modulo ha successo e il server vuole indicare al browser di cancellare i campi del modulo senza inviare nuovo contenuto della pagina. Quale codice di stato si adatta meglio?
Was this page helpful?