Preskočiť na obsah

HTTP stavové kódy

HTTP odpoveď začína trojciferným kódom a krátkym názvom. Prvá číslica je celé zhrnutie: 1xx je predbežná, 2xx uspela, 3xx odkazuje inam, 4xx viní požiadavku, 5xx viní server. Ak si zapamätáte len toto, prečítate aj log, ktorý ste nikdy nevideli.

Názvy sú tu tie z RFC, po anglicky, pretože presne tak idú po sieti — server posiela „Not Found“, nie jeho preklad, a text, ktorý grepujete v logu, sa musí zhodovať s bajtmi, ktoré naozaj odišli.

Rozdiely, ktoré robia skutočné problémy, sú vnútri tried, nie medzi nimi: 401 verzus 403, 301 verzus 308 a 502 verzus 503 odpovedajú každý na inú otázku o tom, čo robiť ďalej — a každý sa bežne používa namiesto toho druhého.

1xx — informačné

3

Predbežné: odpoveď nie je konečná a nasleduje ďalšia.

KódNázov v RFCČo znamená
100ContinueHlavičky prijaté, pokračujte v posielaní tela.
101Switching ProtocolsPrepnutie protokolu — handshake WebSocketu.
103Early HintsRané tipy: prednačítajte tieto zdroje, kým sa pripravuje skutočná odpoveď.

2xx — úspech

5

Požiadavka bola prijatá, pochopená a akceptovaná.

KódNázov v RFCČo znamená
200OKÚspech, s telom odpovede.
201CreatedVytvorené.Malo by nesť hlavičku Location smerujúcu na nový zdroj.
202AcceptedPrijaté na spracovanie, ktoré ešte neprebehlo.
204No ContentÚspech a zámerne bez tela.Správna odpoveď na DELETE alebo na uloženie, ktoré nemá čo vrátiť.
206Partial ContentČiastočný obsah — odpoveď na Range požiadavku. Obnoviteľné sťahovanie.

3xx — presmerovanie

6

Zdroj je niekde inde, alebo je vaša kópia v cache stále platná.

KódNázov v RFCČo znamená
301Moved PermanentlyTrvalo presunuté. Aktualizujte odkazy; cache si to môžu nechať navždy.
302FoundNájdené — dočasné presmerovanie.Rozšírene implementované ako prepnutie metódy na GET, čo naprávajú 307 a 308.
303See OtherPozri iné: výsledok načítajte GET-om. Presmerovanie po odoslaní formulára.
304Not ModifiedNezmenené — vaša kópia v cache je aktuálna. Posiela sa bez tela.
307Temporary RedirectDočasné presmerovanie, metóda a telo zostávajú.
308Permanent RedirectTrvalé presmerovanie, metóda a telo zostávajú.

4xx — chyba klienta

14

Problém je v požiadavke. Zopakovať ju nezmenenú znovu zlyhá.

KódNázov v RFCČo znamená
400Bad RequestServer nedokázal požiadavku vôbec rozparsovať.
401UnauthorizedNeautentifikované — server nevie, kto ste.Volá sa Unauthorized, ale znamená neautentifikované. Má obsahovať WWW-Authenticate.
403ForbiddenAutentifikované a aj tak nepovolené. Lepšie prihlasovacie údaje nepomôžu.
404Not FoundTaký zdroj neexistuje a server neprezradí, či niekedy existoval.
405Method Not AllowedNesprávna metóda pre túto URL.Musí v hlavičke Allow vypísať tie, ktoré fungujú.
406Not AcceptableNič nie je dostupné vo formáte, ktorý vaša hlavička Accept prijme.
409ConflictV rozpore s aktuálnym stavom — úprava proti neaktuálnej verzii.
410GoneZmizlo: existovalo a bolo zámerne odstránené. Silnejšie než 404.
413Content Too LargeTelo je väčšie, než server prijíma.
415Unsupported Media TypeServer tento Content-Type nespracúva.
418I'm a teapotSom čajník. Aprílový vtip z roku 1998, natrvalo rezervovaný.
422Unprocessable ContentRozparsované správne, obsah neplatný — chýbajúce pole, zlá hodnota.
429Too Many RequestsObmedzená frekvencia požiadaviek.Pred opakovaním hľadajte Retry-After a odstupujte exponenciálne.
451Unavailable For Legal ReasonsZablokované z právnych dôvodov. Číslo je narážka na Fahrenheit 451.

5xx — chyba servera

6

Požiadavka môže byť v poriadku. Tieto sa vyplatí zopakovať.

KódNázov v RFCČo znamená
500Internal Server ErrorNeodchytená chyba na serveri. Na vašej strane niet čo opraviť.
501Not ImplementedServer túto metódu vôbec neimplementuje.
502Bad GatewayProxy sa dostala k upstream serveru a dostala z neho niečo nepoužiteľné.
503Service UnavailableZámerne neobsluhuje — zahltený alebo v údržbe.Stav, ktorý by mal nesť Retry-After.
504Gateway TimeoutProxy sa prestala dovolávať upstream servera.
505HTTP Version Not SupportedVerzia HTTP v požiadavke nie je podporovaná.

Časté otázky

Aký je rozdiel medzi 401 a 403?
401 Unauthorized znamená, že požiadavka nebola autentifikovaná — server nevie, kto ste, a správna 401 obsahuje hlavičku WWW-Authenticate s tým, ako sa preukázať. 403 Forbidden znamená, že presne vie, kto ste, a aj tak to nemôžete dostať. Zopakovať 403 s lepšími prihlasovacími údajmi tej istej identity nepomôže.
Mám na presmerovanie použiť 301 alebo 308?
308, ak záleží na metóde. Historicky boli 301 a 302 rozšírene implementované ako „presmeruj a prepni na GET“, čo ticho zmení POST na GET. 307 a 308 vznikli práve preto, aby zaručili, že metóda a telo zostanú. Pri trvalom presune stránky, ktorá sa iba načítava, je 301 stále najlepšie pochopená voľba.
Čo znamená 422, čo 400 nie?
400 Bad Request znamená, že server požiadavku vôbec nedokázal prečítať — pokazený JSON, rozbitá hlavička. 422 Unprocessable Content znamená, že sa rozparsovala v poriadku a obsah je aj tak nesprávny: dobre tvarované telo s chýbajúcim povinným poľom alebo dátumom v minulosti. Rozdelenie je užitočné práve preto, že klient to v každom prípade opravuje inak.
Je 418 skutočný stavový kód?
Skutočný v tom, že je registrovaný a pozná ho každá HTTP knižnica, a vtip v tom, že pochádza z aprílového Hyper Text Coffee Pot Control Protocol z roku 1998. Pokusy získať to číslo na praktické použitie boli zamietnuté, takže je natrvalo rezervované pre čajníky.
Prečo je 503 iné ako 502?
502 Bad Gateway znamená, že proxy sa dostala k upstream serveru a dostala z neho niečo nepoužiteľné. 503 Service Unavailable znamená, že samotný server práve zámerne neobsluhuje — je zahltený alebo v údržbe — a je to ten kód, ktorý by mal nesť hlavičku Retry-After, pretože sa od neho očakáva, že sa spamätá.