Jistě všichni znáte chybu 404 Not Found. Jedná se ale jen o jeden z mnoha stavů, ve kterých se může odpověď serveru nacházet. Jak vypadají ty ostatní a co znamenají?

HTTP (Hypertext Transfer Protocol) je protokol používaný při komunikaci mezi prohlížečem a webovým serverem. Je to tzv. aplikační protokol, který pro přenos po síti využívá protokoly na nižší úrovni síťového modelu – protokol TCP zajišťující spolehlivou spojovanou službu.

Protokol HTTP vychází z architektury klient-server. Klient, v tomto případě internetový prohlížeč, se spojí se serverem a pošle mu požadavek. Server jako reakci na klientův požadavek zasílá odpověď. Přesný formát požadavku a odpovědi je definován ve specifikaci protokolu HTTP. Aktuální verzí je HTTP 1.1.

Požadavek klienta

HTTP-metoda URL-dokumentu HTTP-verze
hlavičky (každá na nový řádek)
prázdný řádek
data z formuláře (u HTTP-metody POST)

Odpověď serveru

Odpověď se nesestává pouze ze samotného obsahu HTML stránky, ale obsahuje i další informace (vlastně metadata).

HTTP-verze stavový-kód stavové-hlášení
hlavičky (každá na nový řádek)
prázdný řádek
obsah odpovědi

Záhlaví požavků a odpovědí

HTTP-metoda – jedná se především o metody GET a POST, v případě POST se data z formuláře vloží v požadavku až na konec za prázdný řádek, v případě GET jsou součásti URL dokumentu
Hlavičky přenášejí doplňkové informace od klienta k serveru a naopak. Protokol HTTP je tzv. bezestavový, tj. server nerozlišuje, které požadavky klientů spolu jak souvisí. Proto byly vymyšleny cookies, které také do hlaviček serveru i klienta patří. Seznam hlaviček, jejich použítí a způsob jejich čtení z požadavků klienta a zápisu do odpovědi klienta se dočtete v článku Hlavičky (headers) v PHP.

Stavový kód a stavové hlašení

Stavový kód je číslo, ke kterému přísluší stavové hlášení. Stavové hlášení je jeho slovní popis. Celá dvojice v odpovědi klientovi hodnotí, jak se podařilo splnit jeho požadavek. Všechny kódy se dají rozdělit na následující kategorie:

Kategorie Rozsah stavových kódů Popis
Informační 100 – 199 Zprávy definované konkrétní aplikací.
Úspěch 200 – 299 Požadavek byl úspěšně zpracován.
Přesměrování 300 – 399 Klient musí pro konečné zpracování požadavků vykonat určitou činnost. O této činnosti se uživatel nemusí dovědět.
Chyba klienta 400 – 499 Problémy na straně klienta.
Chyba serveru 500 – 599 Problémy na straně serveru.

Připravil jsem pro vás i rozpis některých dvojic stavový kod – stavové hlášení včetně popisu akce, která s nimi souvisí.

Stavový kód Popis
100 Continue Klient může pokračovat v zasílání požadavku.
101 Switching Protocols Server mění protokol.
200 OK Operace proběhla bez chyby, požadavek je úspěšně splněn.
201 Created Výsledkem požadavku je nově vytvořený objekt.
202 Accepted Byl přijat asynchronní požadavek. Požadavek byl správně akceptován, odpovídající činnost se však ještě zatím nemusela provést.
204 No Content Požadavek byl úspěsný, ale jeho výsledkem nejsou žádná data pro klienta.
300 Multiple choises Požadovaný zdroj se dá získat z několika různých míst. V odpovědi se vrací seznam všech možností.
301 Moved Permanently Požadovaná adresa URL se trvale přesunula na novou adresu URL. Všechny další odkazy musí použít tuto novou URL.
302 Moved Temporarily Požadovaná adresa URL se dočasně přesunula na novou adresu URL. Všechny další odkazy mohou používat dosavadní URL.
304 Not Modified Podmíněný požadavek byl správně zpracován, dokument však od udané doby nebyl modifikován.
400 Bad Request Server nerozumí požadavku, klient jej musí opravit a poslat znovu.
401 Unauthorized Jestliže byl původní požadavek klienta anonymní, musí být nyní autentizován. Pokud už požadavek byl autentizován, pak byl přistup odepřen.
403 Forbidden Server nemůže požadavku vyhovět, autorizace nebyla úspěšná.
404 Not Found Server nenašel zadanou adresu URL.
405 Method Not Allowed Použitá metoda není přípustná pro dosažení požadovaného objektu.
406 Not Acceptable Požadovaný objekt není k dispozici ve formátu podporovaném klientem.
408 Request Timeout Klient nedokončil odesílání požadavku v časovém limitu.
410 Gone Požadovaný objekt byl trvale odstraněn.
415 Unsupported Media Type Požadavek obsahuje data v serveru neznámém formátu.
500 Internal Server Error Na serveru došlo k neočekávané chybě.
501 Not Implemented Tento požadavek server nepodporuje.
502 Bad Gateway Proxy server nebo brána obdržely od dalšího serveru neplatnou odpověď.
503 Service Unavailable Server dočasně nemůže nebo nechce zpracovat požadavek. Většinou když je přetížený nebo se provádí údržba.
505 HTTP Version Not Supported Server nepodporuje verzi HTTP v daném požadavku.

Zábavné chyby

Stavová hlášení, především chybu 404 Not Found, nemusíte brát tak tragicky. Na Intervalu nedávno vyšel článek Žertovná novinová zpráva a subdomény v PHP, v němž Pavel Růžička popisuje, jak udělat skript zobrazující různé žertovné zprávy jako náhrady za chybová hlášení protokolu HTTP.

Svůj archiv několika zajímavě pozměněných chybových hlášení vám dávám ke stažení. Osobně také používám jedno z nich.

Jak poslat klientovi stavový kód a stavové hlášení v PHP

Jako první z hlaviček, kterou skript PHP posílá, uveďte následující. Je rozdíl, zda PHP pracuje, jako CGI spustitelné nebo jako modul. Proto si zvolte tu správnou, případně uveďte v kódu obě (mě to fungovalo).

header („Status: 404 Not Found“); // pro CGI
header ($SERVER_PROTOCOL. “ 404 Not Found“); // pro modul

Zvolil jsem nejexponovanější status a to 404 Not Found. Nahraďte si jej podle potřeby jakýmkoli jiným např. z tabulky.

Jak poslat klientovi stavový kód a stavové hlášení v ASP

ASP má na posílání stavových kódů a zpráv vlastnost Status objektu Response.

Response.Status = „404 Not Found“

Související články

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět