Protokol HTTP ve verzích 1.0 a 1.1

V minulém dílu našeho seriálu jsme probírali základní vlastnosti hypertextového přenosového protokolu a nejstarší ...


V minulém dílu našeho seriálu jsme probírali základní vlastnosti hypertextového
přenosového protokolu a nejstarší verzi 0.9. Podívejme se nyní, jak vypadá
komunikace klienta a serveru ve verzích novějších.
HTTP verze 1.0
V této verzi protokolu HTTP je syntaxe požadavku klienta již o něco složitější:
metoda cesta_k_dokumentu HTTP/1.0
hlavičky
prázdná_řádka
Nejpoužívanější metodou je GET ta slouží k získání daného dokumentu ze serveru.
Další 2 metody, které můžeme použít, jsou HEAD a POST. První z nich zašle pouze
hlavičky, které obsahují různé metainformace o dokumentu např. datum poslední
modifikace apod. Metoda POST slouží k odeslání dat z formuláře na server. V
tomto případě za prázdnou řádkou obsahuje požadavek ještě hodnoty jednotlivých
polí formuláře.
Hlavičky slouží pro přenos různých doplňujících informací. Každá hlavička je na
samostatné řádce a má tvar jméno_hlavičky: hodnota. Význam jednotlivých
hlaviček popíšeme později. Jejich použití je nepovinné a proto nejjednodušší
požadavek v HTTP/1.0 vypadá takto:
GET /~krystof/linky.html HTTP/1.0
prázdná_řádka
Odpověď má v HTTP/1.0 také odlišný formát. Nesestává pouze ze samotného obsahu
zasílané stránky, ale obsahuje i mnoho důležitých a užitečných informací.
HTTP/1.0 stavový_kód stavové_hlášení
hlavičky
prázdná_řádka
obsah_odpovědi
Stavový kód je třímístné číslo, které indikuje, jak se povedlo uspokojit
požadavek. Přehled stavových kódů je uveden v tabulce "Stavové kódy a hlášení
HTTP/1.0".
Stavové hlášení je slovní popis stavového kódu, který je pro člověka přece jen
srozumitelnější. Pokud vše proběhlo v pořádku, měla by první řádka odpovědi
vypadat následovně:
HTTP verze 1.1
Struktura požadavku i odpovědi zůstává u nejnovější verze HTTP stejná jako u
verze 1.0. Přidány jsou však nové hlavičky a některé z nich jsou nyní i povinné.
Předchozí verze protokolu HTTP vytvářely pro každý objekt nové spojení a poté
jej pomocí HTTP přenesly. Pokud tedy např. HTML stránka obsahovala 4 obrázky,
pro její stažení bylo potřeba navázat 5 spojení (1 stránka + 4 obrázky).
Navázání spojení je však náročné jak na čas, tak na přenosovou kapacitu sítě.
HTTP/1.1 proto spojení mezi klientem a serverem po vyřízení požadavku
neuzavírá, ale umožňuje jej použít pro přenos více objektů. Tím dochází k
ušetření času potřebného k přenosu webovských stránek. Spojení může ukončit
klient nebo server tím, že do požadavku/odpovědi zařadí hlavičku Connection:
close.
V každém požadavku, který vyhovuje standardu HTTP/1.1, musíme použít hlavičku
Host. Jako hodnota se uvádí doménové jméno serveru, ze kterého požadujeme
stránku. Nejjednodušší požadavek pak vypadá takto
GET /~krystof/linky.html HTTP/1.1
Host: www.server.cz
prázdná_řádka
Použití této hlavičky je povinné kvůli tzv. virtuálním serverům.
Dnes je na Internetu běžné, že poskytovatelé připojení umožňují na svých
serverech vystavovat stránky svým zákazníkům. Jako službu nabízejí i umístění
stránek na adrese typu http://www.firma.cz místo obvyklého http://
www.poskytovatel.cz/firma. Samozřejmě, že poskytovatel na jednom serveru
(počítači) vystavuje stránky několika firem. Problém je však v tom, že server
má obvykle jen jednu IP adresu, ke které se připojují klienti.
Prohlížeč se tedy připojí k serveru na port 80 a v požadavku HTTP/1.0 pošle
pouze cestu k dokumentu. Server nemá šanci zjistit, z kterého virtuálního
serveru je dokument požadován. Tato situace se řešila přiřazením několika IP
adres jednomu počítači. Pro každý virtuální server musela existovat jedinečná
IP adresa. V tomto případě již server podle IP rozhraní, ke kterému se
prohlížeč připojil, mohl určit virtuální server, na který požadavek směřuje.
Toto ne příliš elegantní řešení zbytečně plýtvalo IP adresami a kladlo zvýšené
požadavky na konfiguraci serveru při přidání nového virtuálního serveru. Tím,
že požadavky HTTP/1.1 obsahují jméno serveru, odpadá potřeba zřizování nové IP
adresy pro každý virtuální server. Na jedné IP adrese nyní může být přístupný
neomezený počet virtuálních serverů. Jediným háčkem jistě elegantního řešení
problému je fakt, že starší prohlížeče nepodporují tuto novou verzi HTTP.
HTTP/1.1 přidává i několik nových metod požadavků. Pro potřeby pohodlného
publikování na Webu jsou to především metody PUT a DELETE. První z nich slouží
k uložení zaslaného objektu (nejčastěji HTML stránky) na dané URL. HTML editor
tak může přímo na webový server uložit nově vytvořenou nebo modifikovanou
stránku, aniž by se o to musel snažit uživatel sám například pomocí FTP. Metoda
DELETE slouží k odstranění stránky ze serveru. Další metody TRACE, CONNECT a
OPTIONS slouží k zjišťování, analyzování a nastavení způsobu spojení.
Nejpoužívanější hlavičky
Verze protokolu HTTP 1.0 definovala 17 hlaviček. HTTP/1.1 tento počet ještě
zvětšil. My si stručně objasníme význam nejdůležitějších hlaviček.
Content-Type
Tato hlavička udává typ přenášených dat. Typ dat se zapisuje pomocí MIME
konvence. Pro HTML stránky máme typ text/html, pro obyčejný text text/plain,
obrázky mají podle použitého formátu jeden z typů image/gif, image/jpeg nebo
image/png. Podle typu dat prohlížeč pozná, jak příchozí data interpretovat.
HTML stránka, zasílaná prohlížeči jako odpověď, proto mezi hlavičkami obsahuje
následující řádku
Content-Type: text/html
Location
Tato hlavička obsahuje adresu dokumentu, který byl přesunut. Hlavičku server
posílá v případech, kdy stavový kód požadované operace začíná na 3. Prohlížeč
většinou automaticky nahraje stránku, na kterou Location ukazuje. Jako adresu
je potřeba uvést úplné absolutní URL. Např.
Location: http://manes.vse.cz/~xkosj06/index.html
If-Modified-Since
Pokud v požadavku použijeme tuto hlavičku společně s nějakým datem, server nám
požadovaný objekt vrátí pouze, pokud byl od zadaného data změněn. Řekněme, že
chceme získat dokument pouze za předpokladu, že se změnil od 30. března 1998.
Použijeme hlavičku
If-Modified-Since: Mon, 30 Mar 1998 12:00:00 GMT
User-Agent, Server
V hlavičce User-Agent posílá prohlížeč svoji identifikaci obvykle své jméno,
číslo verze a platformu, na které je spuštěn. Server naopak obsahuje
identifikaci serveru, který vyřídil požadavek. Příklady:
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)
Server: Apache/1.3b3
8 0896 / pah









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.