Informativi 1xx
Codici 1xx
100Continue — il server ha ricevuto gli header, il client può inviare il corpo
101Switching Protocols — upgrade a WebSocket o HTTP/2
102Processing — il server ha ricevuto la richiesta, sta elaborando (WebDAV)
103Early Hints — precarica risorse prima della risposta finale
Nota d'Uso
# 100 Continue: client sends Expect header, waits for 100 curl -H "Expect: 100-continue" -d @large.json URL # 101: upgrade to WebSocket Connection: Upgrade / Upgrade: websocket
Successo 2xx
Codici 2xx
200OK — risposta di successo standard
201Created — risorsa creata con successo (POST/PUT)
202Accepted — richiesta ricevuta, elaborazione asincrona
203Non-Authoritative Info — trasformato da proxy
204No Content — successo senza corpo della risposta (DELETE)
205Reset Content — successo, il client deve azzerare il form
206Partial Content — richiesta di intervallo soddisfatta
207Multi-Status — più codici di stato (WebDAV)
Uso nelle API REST
GET → 200Restituisce la risorsa con il corpo
POST → 201Risorsa creata, includi l'header Location
PUT → 200/204Risorsa aggiornata (con/senza corpo)
DELETE → 204Eliminato, nessun corpo restituito
PATCH → 200Aggiornamento parziale, restituisce la risorsa modificata
Reindirizzamento 3xx
Codici 3xx
300Multiple Choices — sono disponibili più rappresentazioni
301Moved Permanently — risorsa spostata, aggiorna i segnalibri
302Found — reindirizzamento temporaneo (spesso usato al posto di 303)
303See Other — reindirizzamento con GET dopo POST
304Not Modified — usa la versione in cache (ETag/If-Modified)
307Temporary Redirect — stesso metodo, posizione temporanea
308Permanent Redirect — stesso metodo, posizione permanente
Comportamento dei Reindirizzamenti
301/308Permanente — i motori di ricerca aggiornano l'indice
302/307Temporaneo — l'URL originale rimane canonico
301/302Possono cambiare il metodo in GET al reindirizzamento
307/308Devono preservare il metodo HTTP originale
Errore Client 4xx
Errori Client Comuni
400Bad Request — sintassi malformata o parametri non validi
401Unauthorized — autenticazione richiesta o fallita
403Forbidden — autenticato ma non autorizzato
404Not Found — la risorsa non esiste
405Method Not Allowed — metodo HTTP non supportato
406Not Acceptable — impossibile soddisfare l'header Accept
408Request Timeout — il client è troppo lento nell'inviare la richiesta
409Conflict — la richiesta è in conflitto con lo stato corrente
Altri Errori Client
410Gone — risorsa eliminata definitivamente (non solo mancante)
411Length Required — header Content-Length mancante
412Precondition Failed — If-Match/If-Unmodified fallito
413Content Too Large — il corpo della richiesta supera il limite
414URI Too Long — l'URL supera il limite del server
415Unsupported Media Type — Content-Type non accettato
422Unprocessable Content — sintassi valida, errori semantici
429Too Many Requests — limite di frequenza superato
Errore Server 5xx
Codici 5xx
500Internal Server Error — eccezione non gestita sul server
501Not Implemented — il server non supporta il metodo
502Bad Gateway — il server upstream ha inviato una risposta non valida
503Service Unavailable — sovraccarico o in manutenzione
504Gateway Timeout — il server upstream non ha risposto in tempo
505HTTP Version Not Supported — versione non gestita
507Insufficient Storage — il server non può archiviare la richiesta (WebDAV)
511Network Auth Required — richiesto login al portale captive
Strategia di Retry
500Riprova con backoff; potrebbe essere transitorio
502/504Riprova — il problema upstream potrebbe risolversi
503Controlla l'header Retry-After prima di riprovare
501/505Non riprovare — correggere la richiesta del client
Codici Comuni
Codici più Usati (a colpo d'occhio)
200OK — tutto funziona
201Created — nuova risorsa creata
204No Content — successo, corpo vuoto
301Moved Permanently — aggiorna l'URL
304Not Modified — usa la cache
400Bad Request — correggi la richiesta
401Unauthorized — effettua prima il login
403Forbidden — permessi insufficienti
404Not Found — URL errato o eliminato
422Unprocessable — errori di validazione
429Too Many Requests — rallenta
500Server Error — non è colpa tua
502Bad Gateway — errore proxy/upstream
503Unavailable — riprova più tardi
Riferimento Header
Header di Richiesta
AcceptTipi di media desiderati nella risposta (es. application/json)
AuthorizationCredenziali (Bearer token, Basic base64)
Content-TypeTipo di media del corpo della richiesta
If-None-MatchCondizionale: ETag per la validazione della cache
If-Modified-SinceCondizionale: data per la validazione della cache
Cache-ControlDirettive di caching (no-cache, max-age)
User-AgentStringa di identificazione del client
Header di Risposta
Content-TypeTipo di media del corpo della risposta
LocationURL di reindirizzamento o della risorsa creata
ETagTag entità per la validazione della cache
Cache-ControlDirettive di caching (max-age, no-store)
Retry-AfterTempo di attesa prima di riprovare (429/503)
WWW-AuthenticateSchema di autenticazione richiesto (inviato con 401)
Set-CookieImposta cookie sul client
Pattern Comuni
Flusso di Caching
# First request — server returns ETag GET /api/data → 200, ETag: "abc123" # Subsequent request — conditional GET /api/data, If-None-Match: "abc123" → 304 Not Modified (use cache)
Flusso di Autenticazione
# Unauthenticated request GET /api/secret → 401, WWW-Authenticate: Bearer # With token GET /api/secret, Authorization: Bearer → 200 OK
Rate Limiting
# Rate limited response 429 Too Many Requests Retry-After: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1700000000
Negoziazione del Contenuto
# Client prefers JSON, accepts XML Accept: application/json, application/xml;q=0.9 # Server can't satisfy → 406 Not Acceptable # Server returns best match → 200 + Content-Type