Stavové kódy 4xx vysvětlené: co chyby klienta skutečně znamenají
Stavový kód 4xx znamená, že server požadavku porozuměl, ale nevyhoví mu, protože je něco v nepořádku se samotným požadavkem. Podle definice leží chyba na straně klienta. Na webu, který vlastníte, je ale 4xx mnohem častěji rozbitý odkaz, zastaralé přepisovací pravidlo nebo přehnaně horlivý firewall než skutečná chyba návštěvníka.
Co třída 4xx vyjadřuje
RFC 9110 definuje třídu 4xx jako "Client Error": server se domnívá, že klient udělal chybu. To pokrývá požadavek na něco, co neexistuje, požadavek bez potřebných přihlašovacích údajů, požadavek, který server odmítne z důvodu zásad, a požadavek, který je nesprávně sestavený nebo příliš velký.
Tři vlastnosti této třídy jsou důležité při ladění konkrétního případu:
- 4xx je konečná odpověď pro daný požadavek tak, jak byl odeslán. Opakování identického požadavku obvykle vyprodukuje identický kód.
- Tělo odpovědi má být srozumitelné pro člověka. Proto existují vlastní chybové stránky a proč je prázdná stránka 404 promarněná příležitost.
- Některé odpovědi 4xx jsou ve výchozím stavu cachovatelné. RFC 9111 uvádí 404, 405, 410 a 414 mezi kódy, které mezipaměť může heuristicky uložit, takže chybná 404 může přežít chybu, která ji způsobila.
Kódy 4xx, se kterými se setkáte
- 400 Bad Request: požadavek je nesprávně sestavený a server ho nedokáže zpracovat. Často špatný query string, příliš velká hlavička cookie nebo rozbitá proxy před aplikací.
- 401 Unauthorized: je vyžadována autentizace a buď chybí, nebo je neplatná. Server musí poslat hlavičku
WWW-Authenticatese způsobem, jak se má klient autentizovat. - 403 Forbidden: server požadavku porozuměl a odmítá ho. Přihlašovací údaje nepomůžou, protože odmítnutí je rozhodnutí zásad, ne selhání autentizace.
- 404 Not Found: na dané URL adrese žádná aktuální reprezentace neexistuje, nebo to server nechce přiznat. Podrobně v návodu ke 404.
- 405 Method Not Allowed: URL adresa existuje, ale ne pro danou metodu. Server musí v hlavičce
Allowuvést, které metody přijímá. - 408 Request Timeout: klientovi trvalo odeslání požadavku příliš dlouho. Odlišné od 504, kde je prodleva na straně serveru.
- 410 Gone: zdroj existoval a byl záměrně odstraněn, a očekává se, že jde o trvalý stav.
- 413 Content Too Large a 414 URI Too Long: požadavek překročil nastavený limit, obvykle limit velikosti nahrávaného souboru nebo velikosti hlavičky.
- 429 Too Many Requests: byl dosažen limit počtu požadavků. Tento kód dopadá zvlášť na monitorovací nastavení.
Kdy je 4xx vlastně špatná konfigurace serveru
Označení "chyba klienta" se týká rolí v protokolu, ne viny. Většina kódů 4xx, které se objeví na zdravém produkčním webu, je způsobena něčím na vaší straně. Přepisovací nebo směrovací pravidlo, které přestalo odpovídat, promění platné URL adresy v 404 napříč celým adresářem, a poznáte to podle 404 na mnoha URL adresách najednou místo na jedné. Sestavení, které přestane generovat soubor s hashem, dělá totéž na úrovni souboru: každá stránka si vyžádá soubor, který vrací 404, takže se stránka vykreslí, ale vypadá rozbitá.
Velkou část zbytku má na svědomí bezpečnostní vrstva. Pravidlo WAF, filtr botů nebo geo-blok mohou skutečnému provozu vracet 403, a snadno se to přehlédne, protože pro IP adresu kanceláře to obvykle projde. Změna autentizace, kvůli které stránka, jež má být veřejná, začne odpovídat 401, je 4xx zcela způsobená serverem. Stejně tak 400 nebo 413 z reverzní proxy, jejíž limit hlavičky nebo těla je menší než limit aplikace, u požadavku, který by aplikace jinak přijala.
Jak diagnostikovat 4xx na vlastním webu
- Nejprve si přečtěte přesný kód a hlavičky. Nesuďte podle chybové stránky, která může být obecná:
Ukáže to stavový řádek pluscurl -sS -o /dev/null -D - https://example.com/broken-pageAllow,WWW-Authenticate,Retry-Aftera jakoukoli hlavičku identifikující server nebo CDN. - Rozhodněte, zda jde o jednu URL adresu, nebo o vzor. Jedna URL adresa ukazuje na odkaz nebo smazanou stránku. Celá předpona cesty ukazuje na směrování, oprávnění nebo nasazení.
- Zkontrolujte, kdo odpověděl. Porovnejte odpověď z okrajového uzlu CDN s odpovědí z původního serveru. 403, které existuje jen na hraně, je pravidlo WAF nebo filtru botů, ne vaše aplikace.
- Vyzkoušejte jinou identitu klienta. Jiný user agent, neautentizovaná relace nebo jiná síť mohou kód změnit ze 403 na 200, což blok okamžitě lokalizuje.
- Přečtěte si řádek serverového logu pro daný požadavek. Logy webového serveru i aplikace zaznamenávají, které pravidlo nebo handler kód vyprodukoval. Tento krok obvykle vyšetřování ukončí.
- Opravte, a poté vyčistěte mezipaměti. Protože je několik kódů 4xx cachovatelných, opravená stránka může dál vracet starou chybu z mezipaměti CDN nebo prohlížeče, dokud se záznam neinvaliduje.
Jak najít stránky 4xx, na které nikdy nezajdete
4xx server neshodí, a proto si toho nikdo nevšimne. Web se načte, domovská stránka je v pořádku a jedna sekce vrací 404 nebo 403 každému kromě vás. Naplánovaná HTTP kontrola porovná přijatý kód s očekávaným, takže stránka, která začne odpovídat 403 místo 200, spustí upozornění místo čekání na tiket podpory. Záleží i na tom, odkud kontrola běží. HostTracker kontroluje z více než 300 kontrolních bodů ve 158 městech, takže se geo-blok nebo regionální pravidlo WAF projeví jako skutečný rozdíl mezi lokalitami místo záhady. Pokud je selhávajícím kódem místo toho 500, 502 nebo 503, příčina je na straně serveru a začít se má u návodu k rodině 5xx.