COMPUTERWORLD
 

profil kontakt CD-ROM CW100 předplatné

archiv anketa CO VY NA TO? CW kariéra seriály
 

IDG

IDG CZ homepage
COMPUTERWORLD
PC WORLD
INTERNET4U
MEGABYTE
TESTCENTRUM
ON-LINE






COMPUTERWORLD 19/98

Protokol HTTP ve verzích 1.0 a 1.1

Jiří Kosek ml.

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 1.

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/1.0 200 OK

Tab. 1: Stavové kódy a hlášení HTTP/1.0

KódPopis

1xxInformační kódy (nepoužívá se)

2xxÚspěšné vyřízení požadavku

200 OKPožadavek byl úspěšně zpracován

201 CreatedVýsledkem požadavku je nově vytvořený objekt

200 AcceptedPožadavek byl přijat, ale dosud není zpracován

200 No contentPožadavek byl úspěšně zpracován, ale jeho výsledkem nejsou žádná data pro klienta

3xxPřesměrování

301 Moved PermanentlyPožadovaný objekt byl trvale přemístěn na jinou adresu

302 Moved TemporarilyPožadovaný objekt byl dočasně přemístěn na jinou adresu

304 Not ModifiedObjekt nebyl změněn (odpověď při podmíněném požadavku pomocí hlavičky If-Modified-Since)

4xxChyba klienta

400 Bad RequestŠpatná syntaxe dotazu

401 UnauthorizedObjekt je dostupný pouze po autorizaci

403 ForbiddenPožadavek je v pořádku, ale server nemá povoleno jej vykonat

404 Not FoundPožadovaný objekt nebyl na serveru nalezen

5xxChyba na straně serveru

500 Internal Server ErrorServeru se něco stalo a nemůže vyplnit požadavek

501 Not ImplementedServer nepodporuje metodu uvedenou v požadavku

502 Bad GatewayServer, pracující jako gateway, dostal špatnou odpověď od dalšího serveru

503 Service UnavailableSlužba je nedostupná (přetížení, údržba serveru)

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

 

 

© IDG Czechoslovakia, a.s., Všechna práva vyhrazena
info@idg.cz, webmaster@idg.cz