Sări la conținut

Coduri de stare HTTP

O răspuns HTTP începe cu un cod din trei cifre și o frază scurtă de motiv. Prima cifră este rezumatul complet: 1xx este provizoriu, 2xx a reușit, 3xx arată altundeva, 4xx vina cererea, 5xx vina serverul. Dacă îți amintești doar atât, poți citi o jurnal pe care nu ai mai văzut-o înainte.

Frazele de motiv de aici sunt cele din RFC-uri, în engleză, deoarece aceasta este ceea ce călătorește pe fir — un server trimite "Not Found", nu o traducere a ei, iar o frază pe care o cauți în jurnal trebuie să se potrivească octetilor care au fost de fapt trimiși.

Distincțiile care cauzează probleme reale sunt în interiorul claselor mai degrabă decât între ele: 401 versus 403, 301 versus 308, și 502 versus 503 răspund fiecare unei alte întrebări despre ce să faci în continuare, și fiecare este folosit în mod regulat pentru cealaltă.

1xx — Informațional

3

Provizoriu: răspunsul nu este final și altul urmează.

CodFrază motivCe înseamnă
100ContinueAnteturi primite, continuă să trimiți corpul.
101Switching ProtocolsProtocoale de comutare — handshake-ul WebSocket.
103Early HintsIndicii timpurii: preîncarcă aceste resurse în timp ce răspunsul real este pregătit.

2xx — Succes

5

Cererea a fost primită, înțeleasă și acceptată.

CodFrază motivCe înseamnă
200OKSucces, cu un corp.
201CreatedCreat.Ar trebui să poarte un antet Location indicând resursa nouă.
202AcceptedAcceptat pentru prelucrare, care nu s-a întâmplat încă.
204No ContentSucces, și deliberat nu corpus.Răspunsul corect la o DELETE, sau o salvare cu nimic de returnat.
206Partial ContentMutat permanent. Actualizează-ți linkurile; cache-urile pot păstra asta pentru totdeauna.

3xx — Redirecție

6

Resursa este altundeva, sau copia ta în cache este încă bună.

CodFrază motivCe înseamnă
301Moved PermanentlyMutat permanent. Actualizează-ți linkurile; cache-urile pot păstra asta pentru totdeauna.
302FoundGăsit — o redirecție temporară.Implementat pe scară largă ca comutare a metodei la GET, pe care 307 o remediază.
303See OtherVezi altul: preluează rezultatul cu GET. Redirecția după o formă POST.
304Not ModifiedVezi altul: preluează rezultatul cu GET. Redirecția după o formă POST.
307Temporary RedirectRedirecție temporară, metodă și corp păstrate.
308Permanent RedirectRedirecție permanentă, metodă și corp păstrate.

4xx — Eroare client

14

Cererea este problema. Repetarea ei neschimbată va eșua din nou.

CodFrază motivCe înseamnă
400Bad RequestServerul nu a putut analiza cererea în total.
401UnauthorizedNeautentificat — serverul nu știe cine ești tu.Numit Unauthorized, dar înseamnă neautentificat. Ar trebui să includă WWW-Authenticate.
403ForbiddenNumit Unauthorized, dar înseamnă neautentificat. Ar trebui să includă WWW-Authenticate.
404Not FoundNicio resursă asemănătoare, iar serverul nu va spune dacă a existat vreodată.
405Method Not AllowedMetodă greșită pentru acest URL.Trebuie să listeze cele care funcționează într-un antet Allow.
406Not AcceptableNimic disponibil într-un format care va lua antetul tău Accept.
409ConflictConflict cu starea curentă — o editare împotriva unei versiuni vechi.
410GonePlecat: exista și a fost deliberat eliminat. Mai puternic decât 404.
413Content Too LargeCorpul este mai mare decât serverul acceptă.
415Unsupported Media TypeServerul nu gestionează acest Content-Type.
418I'm a teapotServerul nu gestionează acest Content-Type.
422Unprocessable ContentAnalizat corect, conținut nevalid — un câmp lipsă, o valoare rea.
429Too Many RequestsAnalizat corect, conținut nevalid — un câmp lipsă, o valoare rea.Cauta Retry-After înainte de reîncercare, și retrage exponențial.
451Unavailable For Legal ReasonsCauta Retry-After înainte de reîncercare, și retrage exponențial.

5xx — Eroare server

6

Cererea ar putea fi bună. Acestea sunt cele care merită reîncerc.

CodFrază motivCe înseamnă
500Internal Server ErrorO eroare nehandled pe server. Nimic de reparat de partea ta.
501Not ImplementedServerul nu implementează deloc această metodă.
502Bad GatewayUn proxy a ajuns la serverul din aval și a primit ceva nefolosibil.
503Service UnavailableDeliberat nu servesc — supraîncărcat sau în întreținere.Starea care ar trebui să poarte Retry-After.
504Gateway TimeoutStarea care ar trebui să poarte Retry-After.
505HTTP Version Not SupportedVersiunea HTTP din cerere nu este acceptată.

FAQ

Care este diferența dintre 401 și 403?
401 Unauthorized înseamnă că cererea nu a fost autentificată — serverul nu știe cine ești tu, și un 401 corect include un antet WWW-Authenticate spunând cum să o dovedești. 403 Forbidden înseamnă că știe exact cine ești tu și tot nu poți avea asta. Reîncercarea unui 403 cu credențiale mai bune pentru aceeași identitate nu va ajuta.
Ar trebui să folosesc 301 sau 308 pentru o redirecție?
308 dacă metoda contează. Din punct de vedere istoric 301 și 302 au fost implementate pe larg ca "redirecție și comutare la GET", care transformă în tăcere o POST într-o GET. 307 și 308 au fost introduse pentru a promite că metoda și corpul sunt păstrate. Pentru o mișcare permanentă a unei pagini care este întotdeauna preluată, 301 rămâne cea mai bine înțeleasă alegere.
Ce înseamnă 422 pe care 400 nu-l face?
400 Bad Request înseamnă că serverul nu a putut înțelege deloc cererea — JSON-ul malformat, un antet rupt. 422 Unprocessable Content înseamnă că s-a analizat bine și conținutul este oricum greșit: un corp bine format cu un câmp obligatoriu lipsă sau o dată în trecut. Diviziunea este utilă tocmai deoarece reparația clientului este diferită în fiecare caz.
Este 418 un cod de stare real?
Este real prin aceea că este înregistrat și fiecare bibliotecă HTTP o știe, și o glumă prin aceea că vine din 1998 April Fools' Hyper Text Coffee Pot Control Protocol. Încercările de a revendica numărul pentru utilizare practică au fost respinse, deci este permanent rezervat pentru ceainice.
De ce este 503 diferit de 502?
502 Bad Gateway înseamnă că un proxy a ajuns la serverul din aval și a primit ceva nefolosibil. 503 Service Unavailable înseamnă că serverul însuși nu servește cu intenție chiar acum — supraîncărcat, sau în întreținere — și aceasta este cea care ar trebui să poarte un antet Retry-After, deoarece aceasta este cea care se așteaptă să se recupereze.