Číslo se bere jako předpona kódu — „40" najde 400 až 409. Text se hledá v anglickém i českém názvu a v celém popisu, na diakritice nezáleží.
Kódy, které nejsou v registru IANA, ale reálně je posílá nginx (444, 499), Cloudflare (520 až 526), IIS nebo Laravel (419).
Detail kódu
Seznam kódů
| Kód | Anglický název | Český název | Třída | Definuje |
|---|
Kliknutím na číslo kódu se načte jeho detail nahoře. Tlačítko „Kopírovat seznam" zkopíruje celý filtrovaný výpis jako text oddělený tabulátory, takže jde vložit do tabulkového procesoru.
Jak v přehledu hledat
- Zadejte číslo kódu, anglický název nebo české slovo. Na diakritice nezáleží.
- Číslo se bere jako předpona, takže dotaz 40 vypíše kódy 400 až 409.
- Filtrem tříd zúžíte výpis jen na chyby klienta nebo serveru.
- Kliknutím na číslo se nahoře načte detail včetně odkazu do RFC.
Co znamenají třídy 1xx až 5xx
První číslice určuje, jak má klient s odpovědí naložit. Zbylé dvě rozlišují konkrétní situaci.
- 1xx informativní. Požadavek dorazil a zpracování pokračuje. Běžný uživatel je nikdy nevidí.
- 2xx úspěch. Požadavek proběhl. Nejčastější je 200 OK, u vytvoření záznamu patří 201.
- 3xx přesměrování. Zdroj je jinde. Trvalé stěhování má 301, dočasné 302.
- 4xx chyba klienta. Problém je v požadavku. Špatná adresa, chybějící přihlášení, nedostatečná práva.
- 5xx chyba serveru. Požadavek byl v pořádku, ale server ho nezvládl vyřídit.
Chyba 404 Not Found
Na zadané adrese není nic. Chyba je v adrese, ne na serveru: ten funguje správně a odpovídá tak, jak má. Popisuje ho RFC 9110 v sekci 15.5.5.
Za většinou 404 stojí překlep, smazaný obsah bez přesměrování nebo změna struktury adres po redesignu. V aplikaci to bývá chybějící routa, ve WordPressu rozbité trvalé odkazy, které spraví jejich opětovné uložení.
Jako správce zjistěte, odkud návštěvníci na neexistující adresu chodí; ukáže to Search Console i přístupový log. Když obsah žije na nové adrese, nastavte trvalé přesměrování 301, které připraví generátor přesměrování v .htaccess. Když zmizel natrvalo, nechte 404, nebo pošlete 410 Gone. Nikdy nepřesměrovávejte všechny neexistující adresy na titulní stránku.
Měkká 404 je horší než skutečná. Nastane, když chybová stránka vrací kód 200. Vyhledávač ji zaindexuje jako plnohodnotný obsah a do výsledků se dostanou desítky prázdných stránek. V prohlížeči se to nepozná, protože stránka vypadá správně; poznáte to jedině v hlavičkách odpovědi.
Chyba 500 Internal Server Error
Sběrný kód pro všechno neočekávané. Něco v aplikaci se pokazilo a server to neumí zařadit přesněji. Právě obecnost je na něm nepříjemná: hláška v prohlížeči je záměrně vágní, aby neprozradila vnitřek aplikace, takže skutečná chyba je v logu na serveru.
Typicky za ní stojí fatální chyba v kódu po nasazení nové verze, nedostupná databáze s vyčerpanými spojeními, překročený limit paměti nebo překlep v .htaccess, po kterém Apache vrací 500 na celý web.
Nejdřív zjistěte skutečnou chybu, teprve pak opravujte. Otevřete chybový log serveru (u Apache error_log, u nginxu error.log) a najděte poslední záznam odpovídající času chyby; bude v něm soubor i číslo řádku. Když log mlčí, zapněte na chvíli podrobné hlášení chyb a na produkci ho hned zase vypněte. A vzpomeňte si, co se změnilo: chyba obvykle přijde po nasazení nebo po aktualizaci rozšíření.
Chyba 502 Bad Gateway
Server v roli brány poslal požadavek dál a dostal zpět neplatnou odpověď. Chyba tedy není v prohlížeči ani v adrese, ale mezi dvěma servery. Typická sestava je nginx vpředu a aplikace vzadu: požadavek se předá PHP-FPM nebo kontejneru, a když z druhé strany přijde nesmysl nebo nepřijde nic, vrátí se 502.
Nejčastěji aplikace vůbec neběží. Dál to bývá špatná adresa upstreamu, vyčerpaní workeři PHP-FPM při náporu nebo příliš velké hlavičky, které se nevejdou do vyrovnávací paměti proxy. U webu za Cloudflare může 502 vracet i on sám.
Postupujte odzadu, od aplikace k proxy. Ověřte, že aplikační služba běží, a přečtěte chybový log nginxu: zpráva connect() failed ukazuje na neběžící aplikaci, upstream sent too big header na malou vyrovnávací paměť. Pak zkontrolujte, že adresa v direktivě upstream odpovídá tomu, kde aplikace skutečně poslouchá.
Chyba 503 Service Unavailable
Služba je dočasně mimo provoz, ať už kvůli náporu, nebo kvůli údržbě. Podstatné je slovo dočasně: na rozdíl od 500, které hlásí neočekávaný pád, je 503 vědomé a řízené odmítnutí. Server funguje a záměrně říká, ať to zkusíte za chvíli.
Vždy k ní přidejte hlavičku Retry-After. Ta říká, kdy se má klient vrátit, a přijímá počet sekund nebo konkrétní datum. U plánované odstávky uveďte reálný čas jejího konce, u přetížení stačí desítky sekund. Vyhledávače se podle ní řídí; bez ní si robot interval odhadne sám a může přijít dřív, než je server připravený.
Při plánované odstávce nikdy nepoužívejte 200 s nápisem o údržbě ani 404. Vyhledávač by stránku zaindexoval s obsahem o údržbě, nebo by ji rovnou vyhodil. Rozumí správně jedině 503. Krátká odstávka v řádu hodin se na pozicích neprojeví, ale když trvá dny, hodnocení klesá.
Ve WordPressu prozradí zapomenutý režim údržby soubor .maintenance v kořeni, který po nepovedené aktualizaci občas zůstane. Dál se podívejte na vytížení serveru, na počet otevřených spojení k databázi a u load balanceru na to, proč instance neprocházejí zdravotní kontrolou.
Chyby 401 a 403: kdy která
Tyhle dvě se pletou nejčastěji. 401 Unauthorized znamená „neznám tě, přihlas se“. 403 Forbidden znamená „znám tě a stejně tě nepustím“. U 401 má opakované přihlášení smysl, u 403 ne. Pomůcka: 401 řeší totožnost, 403 oprávnění.
Název kódu 401 je matoucí. Slovo unauthorized svádí k autorizaci, ale RFC 9110 v sekci 15.5.2 popisuje autentizaci. Specifikace u něj navíc vyžaduje hlavičku WWW-Authenticate, která klientovi říká, jakým způsobem se má ověřit. Spousta API ji neposílá, což je formálně porušení a projeví se to u knihoven spoléhajících na automatické obnovení tokenu.
Za 401 stojí obvykle vypršený token, chybějící hlavička Authorization, chybějící slovo Bearer před tokenem nebo podpis jiným klíčem, než jakým ho server ověřuje. Hodnoty exp a nbf si rozložíte v JWT dekodéru. Počítejte i s tím, že se hlavička Authorization při přesměrování na jinou doménu zahazuje.
U 403 začněte právy k souborům: adresáře obvykle 755, soubory 644, vlastník podle uživatele webového serveru. Nastavení převede chmod kalkulačka. Dál projděte, jestli v kořeni je soubor s indexem, jestli v .htaccess není pravidlo Deny, a podívejte se do logu ochranné vrstvy. WAF často zastaví formulář jen kvůli apostrofu nebo HTML značce v textu. U API ověřte, že token má potřebný rozsah oprávnění; platný token bez správného scope končí právě 403.
Nebezpečná je plošná 403, kdy ochranná vrstva začne blokovat Googlebota podle chování nebo rozsahu IP. Web pak zmizí z výsledků, aniž by si toho někdo hned všiml.
Rozdíl mezi 500, 502, 503 a 504
Všechny čtyři znamenají potíž na straně serveru, ale každý ukazuje na jiné místo. Zjednodušeně: 502 je mrtvá aplikace, 504 Gateway Timeout pomalá aplikace, 503 vědomé odmítnutí a 500 chyba v kódu. U 504 tedy hledejte pomalý dotaz nebo zablokovaný proces, u 502 začněte tím, jestli aplikace vůbec běží.
Nestandardní kódy, které uvidíte v logu
Registr IANA není úplný seznam toho, co po síti chodí. Servery a frameworky si přidaly vlastní kódy a v logu na ně narazíte běžně.
nginx používá 444 pro zavření spojení bez odpovědi a 499, když klient odejde dřív, než server stihl odpovědět. Cloudflare obsadil rozsah 520 až 526 pro potíže mezi svou sítí a původním serverem. Laravel vrací 419 při vypršení CSRF tokenu, IIS 440 při vypršení přihlášení. V přehledu je najdete, dokud nevypnete přepínač nestandardních kódů.
Časté otázky
Škodí chyby 404 mému webu?
Samy o sobě ne. Neexistující adresy jsou přirozená součást webu a Google výslovně uvádí, že hodnocení nesnižují. Problém nastává, když na neexistující stránku vedou odkazy z vašeho vlastního webu, nebo když jde o adresu s návštěvností.
Kdy použít 404 a kdy 410?
404 znamená, že server zdroj nenašel, a nechává otevřené, jestli se vrátí. 410 Gone potvrzuje trvalé odstranění a vyhledávače podle něj adresu z indexu vyřadí rychleji. Když víte, že se obsah nevrátí, je 410 přesnější.
Kdy použít 400 a kdy 422?
400 Bad Request patří požadavku, kterému server nerozumí, typicky rozbitý JSON. 422 Unprocessable Content se hodí, když je požadavek syntakticky správný, ale neprojde validací, třeba e-mail bez zavináče. Rozlišení není povinné a řada API posílá jen 400.
Kdy použít 503 a kdy 429?
429 Too Many Requests patří jednomu konkrétnímu klientovi, který překročil svůj limit. 503 se týká všech, protože nefunguje celá služba. Když omezujete jednotlivce, posílejte 429, jinak ostatní klienti dostanou zavádějící informaci.
Je chyba 5xx na mé straně?
Skoro nikdy. Kód páté třídy vrací server, takže na vašem počítači není co spravovat, a obnovení stránky ani smazání mezipaměti nepomůže. Výjimkou je firemní proxy nebo VPN, které do spojení vstupují a mohou 502 vrátit samy.
Musí chybová stránka vracet chybový kód?
Ano, a je to častá chyba. Pokud vlastní stránka „nenalezeno“ vrátí kód 200, vyhledávače ji zaindexují jako plnohodnotný obsah. Říká se tomu měkká 404 a poznáte ji jedině v hlavičkách odpovědi, protože v prohlížeči vypadá správně.