předcházející následující

Hyper Text Transfer Protocol


Kapitola 2. Základní vlastnosti protokolu HTTP

Obsah

2.1. Základní operace
2.1.1. Důležité informace
2.1.2. Načtení obsahu URL adresy
2.2. Stavové kódy
2.3. Příkazy protokolu HTTP
2.4. Pole hlavičky



Časová náročnost kapitoly: 10 minut

    Hyper Text Transfer Protocol (zkratka HTTP) je jeden z nejdůležitějších protokolů Internetu pro přenos dat mezi serverem a klientem. Před vznikem HTTP byl nejdůležitějším protokolem pro přenos souborů protokol FTP (File Transfer Protocol) [4]. HTTP je jednoduchý protokol implementující malou množinu příkazů, schopný přenášet data určená URL adresou. Využívá standardů MIME, díky čemuž se dá rozšiřovat o formáty různých médií.
    Klienty HTTP představují většinou webové prohlížeče (browsery) a HTTP servery jsou většinou webové servery.
    Protokol HTTP komunikuje na portu 80 TCP protokolu, při zadávání adresy ve formátu URL je ovšem možno zadat i jiný port. Navíc protokol HTTP není závislý na protokolu TCP a může pracovat i s jinými spolehlivými protokoly.


    Protokol HTTP používá identifikaci systému verzí "<hlavní>.<podřadná>". Systém verzí se používá k tomu, aby umožnil odesílateli indikovat formát zprávy, který použil pro budoucí komunikaci.
Číslo <podřadné> verze se zvyšuje vždy, když jsou provedeny změny protokolu, které nemění celkový mechanismus syntaktického zpracování zpráv.
Číslo <hlavní> verze se zvyšuje, pokud se mění formát zpráv s protokolem.
Hlavní i podřadná verze musí být brány jako oddělené čísla, a každé mohou být větší než jedna číslice.
Příklad:
    Verze HTTP/2.4 je nižší než HTTP/2.13

HTTP/1.0 servery musí:
    rozpoznat formát požadavků pro požadavky protokolů HTTP/0.9 a HTTP/1.0
    rozumět jakémukoliv platnému požadavku formátu HTTP/0.9 nebo HTTP/1.0
    odpovědět ve stejné verzi protokolu, jakou používá klient

HTTP/1.0 klienti musí:
    rozumět formátu stavů pro odpovědi ve verzi HTTP/1.0
    rozumět jakékoli platné odpovědi formátu HTTP/0.9 nebo HTTP/1.0.

HTTP/1.1 servery musí:
    musí rozumět poli hlavičky HOST
    pole hlavičky HOST musí být obsaženy v odpovědích
    pokud není pole hlavičky HOST obsaženo v požadavku, musí server odpovědět 400
    musí být schopen pracovat s absolutní URI

HTTP/1.1 klienti musí:
    musí rozumět poli hlavičky HOST

2.1. Základní operace


Časová náročnost kapitoly: 15 minut
    Veškerá komunikace u protokolu HTTP probíhá tak, že klient vyšle požadavek a server na něj odpovídá. I z důvodu bezpečnosti přenosu dat ale mohou nastat případy, kdy mezi lokální sítí a Internetem je zařízení (firewall) filtrující požadavky a odpovědi mezi místní sítí a internetem. V tomto případě firewall pracuje jako HTTP server pro místní síť a v rámci Internetu se chová jako webový klient. Vlastně přijímá požadavky na www stránky z lokální sítě, z Internetu je načte a zasílá získané stránky do lokální sítě. Ve verzi HTTP/1.0 klient iniciuje pro každý požadavek samostatné TCP spojení. Server po odeslání odpovědi TCP spojení ukončí. Ve verzi HTTP/1.1 je možnost podržet spojení přes více transakcí dotaz - odpověď, což vede k zefektivnění komunikace. Základními operacemi protokolu HTTP je načtení webové stránky, získání informací o webové stránce a odeslání dat z formuláře či skriptu vloženého do www stránky na HTTP server. Tyto operace se provádí pomocí příkazů GET, HEAD a POST.
    Protokol HTTP/1.1 využívá jak URL (uniform resouce locator), tak i URI (uniform resouce identifikator). URI je nadmnožinou URL a URN (uniform resource name). Při používání protokolu HTTP/1.1 vystačíme v místech, kde se vyžaduje adresa URI, s adresou zapsanou podle specifikací URL. Více informací o URI je možné nalézt ve specifikaci protokolu HTTP/1.1 [3].

2.1.1. Důležité informace

Čtěte pozorně tyto informace, jsou důležité a vlivem jejich nepochopení vznikají chyby při používání protokolu HTTP.
Za příkazy protokolu HTTP (GET, HEAD, POST) spolu s jejich parametry následuje hlavička. Každé pole hlavičky je na vlastním řádku, identifikátor pole hlavičky je následovaný znakem dvojtečka ":", mezerou a potom hodnotou pole, řádek je ukončen sekvencí znaků CR,LF.

Příklad požadavku:
GET http://www.seznam.cz HTTP/1.0
Accept: */*
Accept-Language: cs
Pragma: no-cache
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; MSNATLAS01.CZ; Q312461)
Host: www.seznam.cz
Proxy-Connection: Keep-Alive

    Každá odpověď serveru musí být ve tvaru, kdy identifikátor použitého protokolu je následován stavovým kódem. Potom následuje hlavička s vlastnostmi stejnými jako při odesílání příkazů. Pak následuje prázdný řádek (dvakrát sekvence znaků <CR><LF>). Ten odděluje hlavičku od přenášeného obsahu. Potom již následuje žádaný obsah.


Příklad odpovědi:
HTTP/1.0 200 OK
Date: Sun, 15 Dec 2002 22:22:11 GMT
Content-Type: text/html
Content-Length: 16
<CR><LF>

2.1.2. Načtení obsahu URL adresy


    Pokud chce klient získat stránku zadanou URL ze serveru, použije příkaz GET, do parametru zadá URL adresu, o kterou má zájem. Na dalších řádcích posílá serveru v hlavičce doplňující informace o údajích, o které má zájem. Těmito poli je možno v hlavičce nastavit mnoho dále popsaných vlastností. Jako odpověď od serveru přichází hlavička stejného formátu jako odeslaná, následovaná požadovaným dokumentem.

2.2. Stavové kódy


Časová náročnost kapitoly: 15 minut
    Protokol HTTP definuje množinu stavových kódů, kterým musí rozumět klienti a servery musí být schopné je generovat. Stavové kódy se dají rozdělit do kategorií podle následující tabulky.

Kategorie stavových kódů

Čísla 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žadavku vykonat určitou další činnost

Chyba klienta

400-499

Problémy na straně klienta

Chyba serveru

500-599

Problémy na straně serveru


    Každý stavový kód se skládá z číselné hodnoty a textového řetězce, který může obsahovat doplňující informace. Všechny stavové kódy a jejich význam uvádí následující tabulka. Tyto stavové kódy jsou přímo specifikací protokolu HTTP.

Stavový kód

Popis

200 OK

Operace proběhla bez chyby, požadavek je úspěšně splňen

201 Created

Požadavek typu POST byl kladně vyřízen

202 Accepted

Požadavek byl správně akceptován, odpovídající činnost se však nemusela nutně provést

204 No Content

Požadavek byl úspěšný, ale klient nemá co zobrazit (obsah dokumentu je prázdný)

300 Multiple Choices

Požadovaný zdroj se dá získat z různých míst. V odpovědi se vrací seznam všech možností. Pole Location obsahuje variantu, kterou doporučuje server

301 Moved Permanently

Požadovaná adresa URL se trvale přesunula na novou adresu URL, popisuje ji pole Location odpovědi

302 Moved Temporarily

Požadovaná adresa URL se dočasně přesunula na novou adresu URL, popisuje ji pole Location odpovědi

304 Not Modified

Podmíněný požadavek GET se správně zpracoval, dokument nebyl od doby definované polem If-Modified-Since změněn

400 Bad Request

Server nerozumí požadavku

401 Unauthorized

Klient musí byt autorizován; pokud autorizován je, byl požadavek zamítnut

403 Forbidden

Server nemůže požadavku vyhovět

404 Not Found

Server nenašel zadanou adresu URL

500 Internal Server Error

Na serveru došlo k neočekávané chybě

501 Not Implemented

Tento požadavek server neimplementuje

502 Bad Gateway

Proxy server nebo brána obdržely od serveru neplatnou odpověď

503 Service Unaviable

Server dočasně nemůže, nebo nechce zpracovat požadavek

2.4. Příkazy protokolu HTTP


Protokol HTTP verze 1.0 definuje příkazy GET, HEAD a POST. Verze 1.1 protokolu HTTP rozšiřuje HTTP 1.0 o příkazy PUT, DELETE a TRACE
Minimální implementace protokolu HTTP musí obsahovat tři příkazy: GET, HEAD, POST

2.4. Pole hlavičky


Časová náročnost kapitoly: 25 minut
    Zprávy protokolu HTTP obsahují různá pole hlavičky, která se mohou používat v požadavcích a odpovědích. Některá z nich jsou určena výhradně požadavkům klienta, jiná zase odpovědím serveru.

Následuje seznam polí hlaviček a popis jejich vlastností

Protokol HTTP 1.0 používá následující pole hlavičky


Pole Allow
Pole hlavičky Allow identifikuje, které z příkazů (GET, HEAD,...) server podporuje. Proxy nemusí měnit pole Allow, i když nepodporuje všechny specifikované metody. Pole Allow neidentifikuje, které metody (pole hlavičky) server implementuje.

Pole Authorization
Pole hlavičky Authorization využívají servery, které nedovolují anonymní přístup k některým informacím. Uživatelský agent, který se chce identifikovat na serveru, odešle obvykle po přijetí odpovědi 401 (unauthorized) v poli Authorization autentikační informace uživatele. Jestliže server toto oprávnění nepřijme, odpoví stavem 403 (forbidden).

Pole Content-Encoding
Pole hlavičky Content-Encoding se používá pro identifikaci typu kódování přenášeného obsahu. Content-Encoding umožňuje kompresi přenášeného obsahu podle specifikovaného algoritmu (např. x-gzip).

Pole Content-Length
Pole hlavičky Content-Length specifikuje velikost těla zprávy. Udává se v desítkové soustavě. V případě příkazu HEAD udává velikost dat, která by byla přenesena příkazem GET. Jakákoli velikost větší nebo rovná nule je platná.

Pole Content-Type
Pole hlavičky Content-Type popisuje MIME typ média těla přenášené zprávy. Nebo v případě příkazu HEAD typ média těla zprávy, která by se načetla příkazem GET. Typickým příkladem je typ "text/html".

Pole Date
Pole hlavičky Date definuje datum a čas, kdy zpráva vznikla (nikoli datum vzniku dokumentu). Používá se zde syntaxe popsané v RFC 822[5].

Pole Expires
Pole hlavičky Expires obsahuje datum a čas, po kterém se data mají považovat za neplatná. Aplikace po uplynutí této doby nesmí ukládat data do cache. Jestliže je datum a čas stejný nebo dřívější než datum a čas specifikovaný v poli Date, nesmí příjemce data ukládat do cache. Pole Expires nemůže být použito k nucenému obnovení dat ze serveru.

Pole From
Pole hlavičky From může obsahovat údaje o internetové emailové adrese uživatele, který pracuje s klientskou aplikací. Používá se pro účely protokolování, nikoli autorizace.

Pole If-Modified-Since
Pole hlavičky If-Modified-Since se může odeslat jako součást požadavku klienta při použití metody GET. Pokud nebyl požadovaný dokument změněn od data a času specifikovaného tímto polem, server nebude odesílat vyžadovaná data, ale pošle stavový kód 304 (not modified) bez jakéhokoli těla zprávy. V opačném případě odesílá server data jako při normálním použití metody GET.

Pole Last-Modified
Pole hlavičky Last-Modified definuje datum a čas poslední změny požadovaného dokumentu.

Pole Location
Pole hlavičky Location obsahuje přesnou adresu URL, na které je uložen zdrojový dokument. Pro stavové kódy 300-399 musí pole Location obsahovat adresu URL preferovanou serverem pro automatické přesměrování. Je dovoleno používat pouze absolutní URL adresy.

Pole Pragma
Pole hlavičky Pragma se využívá pro direktivy závislé na konkrétní implementaci. Mohou být požadovány jak po klientu, tak i serveru. Všechny direktivy Pragma specifikují volitelné chování protokolu. Jednou z obvyklých direktiv Pragma je "no-cache", která znamená, že se data nemají ukládat do cache.

Pole Referer
Pole hlavičky Referer může být odesíláno jako součást požadavku klienta. Umožňuje serveru identifikovat, ze které URL adresy byl požadovaný zdroj vyžádán. Toto pole umožňuje serveru generovat seznam zpětných referencí o URL adresách, ze kterých se ke zdroji přistupovalo. Využívá se zejména při zpětném hledání neexistujících odkazů a při účtování příjmů z reklamy.

Pole Server
Pole hlavičky Server je odesíláno jako součást odpovědi serveru. Pole obsahuje informace o HTTP serveru, který odpovídá na požadavky. Pole rozděleno na část product a comment.

Pole User-Agent
Pole hlavičky User-Agent se odesílá jako součást požadavku. Pole obsahuje informace o typu uživatelského agenta (web browseru). Některé proxy servery připojují své informace do tohoto pole.

Pole WWW-Authenticate
Pole hlavičky WWW-Authenticate musí být součástí odpovědi 401 (Unauthorized) serveru. Obsah indikuje, jaký typ autentizace je vyžadován.



Protokol HTTP 1.1 rozšiřuje protokol HTTP 1.0 o tato pole hlavičky:



Pole požadavku Accept Pole hlavičky Accept může být použito ke specifikování typu dat v odpovědi. Accept může být použito pro indikaci, že požadavek je omezen na malou množinu požadovaných typů jako je třeba vložený obrázek.

Pole požadavku Accept-Charset
Pole hlavičky Accept-Charset indikuje, kterou znakovou sadu má při odpovědi server použít.

Pole požadavku Accept-Encoding Pole hlavičky Accept-Encoding je podobné poli Accept, ale omezuje kódování obsahu zprávy (např. gzip).

Pole požadavku Accept-Language
Pole hlavičky Accept-Language je podobné poli Accept, ale omezuje množinu národních jazyků, které jsou preferované v odpovědi (např. Accept-Language: da)(preferuji dánštinu).

Pole odpovědi Accept-Ranges
Pole hlavičky Accept-Ranges umožňuje serveru indikovat rozsah přijímaných dotazů.

Pole odpovědi Age
Pole hlavičky Age sděluje odesílateli odhad množství času, po který potrvá vygenerování odpovědi na serveru. Odpověď v cache je "čerstvá" pokud její položka age nepřesáhla její životnost.

Pole dotazu i odpovědi Cache-Control Pole hlavičky Cache-Control se používání ke specifikování podmínek, kterým se musí podrobit všechny mechanizmy zajišťující cachování. Podmínky zamýšlejí specifikovat chování, aby zamezily cache nepřesné zprostředkování dotazu či odpovědi.

Pole dotazu i odpovědi Connection
Pole hlavičky Connection umožňuje odesílateli specifikovat nastavení která jsou požadována pro vlastní připojení, a nesmí být přenášena přes proxy pro budoucí připojení.

Pole Content-MD5
Pole hlavičky Content-MD5 obsahuje MD5 otisk obsahu zprávy.

Pole ETag
Pole hlavičky ETag definuje přívěšek(tag) pro připojenou entitu. Pole hlavičky použité s ETag jsou popsány detailněji v RFC 2068.

Pole dotazu Host
Pole hlavičky Host specifikuje Internetového Hosta (záznam z DNS) a číslo portu zdroje, který odesílá požadavek. Pole Host musí reprezentovat síťovou adresu zdrojového serveru nebo brány, branou jako původní URL. Toto umožňuje zdrojovému serveru nebo bráně rozlišovat mezi vnitřními vícevýznamovými URL (jako je root "/"), URL serveru s více URL (na jednom serveru může pracovat více domén, např. www.jinak.cz, www.infocity.cz, www.elektrostyl.cz pracují na jednom serveru a tudíž jsou reprezentovány i jednou IP adresou).

Pole Last-Modified
Pole hlavičky Last-Modified obsahuje datum a čas kdy byly data naposledy změněny.

Pole dotazu Max-Forwards
Pole hlavičky Max-Forwards může být použito s příkazem TRACE k omezení počtu proxy nebo brán přes které požadavek přechází. Toto může být užitečné když se v datovém kanálu vyskytne smyčka nebo chyba.

Pole odpovědi Proxy-Authenticate
Pole hlavičky Proxy-Authenticate musí být součásti odpovědi na 407 (Proxy Authentication Required). Hodnota pole se skládá z vybídnutí, které indikuje autentizační mechanismus, a parametrů použitelných pro proxy.

Pole dotazu Proxy-Authorization
Pole hlavičky Proxy-Authorization dovoluje klientu identifikovat sám sebe (nebo uživatele) k proxy, která vyžaduje autentizaci.

Pole odpovědi Public
Pole hlavičky Public obsahuje seznam metod (příkazů) podporovaných serverem. Význam tohoto pole je informovat příjemce o možnostech serveru s ohledem na neobvyklé metody.

Pole odpovědi Retry-After
Pole hlavičky Retry-After může být použito se zprávou 503 (Service Unavailable). Indikuje dobu po kterou se očekává, že bude služba nedostupná. Hodnota tohoto pole může být zapsána jako absolutní datum a čas nebo relativní doba ve vteřinách.

Pole dotazu i odpovědi Transfer-Encoding
Pole hlavičky Transfer-Encoding indikuje jaký (pokud nějaký) typ transformace byl použit na tělo zprávy pro zajištění bezpečnosti mezi odesílatelem a příjemcem. Toto pole má jiný význam oproti Content-Encoding ve které kódování je vlastnost zprávy nikoli entity.

Pole dotazu i odpovědi Upgrade
Pole hlavičky Upgrade umožňuje klientovi specifikovat jaký přídavný komunikační protokol je podporován a bude moci být použit pokud server najde příslušný na přepnutí protokolů. Server musí použít pole Upgrade s odpovědí 101 (Switching Protocols).

Pole dotazu i odpovědi Via
The Via general-header musí být použito bránami a proxy k indikaci protokolů a příjemců mezi klientem a serverem při požadavku, a mezi server klientem při odpovědi. Je analogické s polem "Received" RFC 822 a zamýšlí se používat pro sledování přeposílání zpráv, a identifikaci použitých protokolů odesílatelů během celého doručení zprávy.

Pole odpovědi Warning
Pole hlavičky Warning se používá k přenosu dodatečných informací o stavu odpovědi, které nemohou být odvozeny ze stavového kódu.


Kromě vyjmenovaných polí hlavičky existují ještě další, ke kterým je možno získat bližší informace v RFC 2068.
Pole Content-Base
Content-Language
Content-Location
Pole Content-Range
Pole požadavku If-Match
If-None-Match
If-Range
If-Unmodified-Since
Range
Vary

2.5. Cvičení


Námět na příklady:
    Vysvětlete k čemu slouží pole hlavičky protokolu HTTP.

2.6. Cvičení


Námět na příklady:
    Jaká jsou pravidla pro formát dotazů a odpovědí při použití příkazů protokolu HTTP?




předcházející následující