Hyper Text Transfer Protocolu (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á idikací systému verzí "<hlavní>.<podřadná>".
Systém verzí se používá aby umožníl 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
parsrová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 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 |
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. 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í annonymní 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 nucenené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 dovolono 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 spoecifiková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 jedom 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 klietovi 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ů
odeslatelů 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?