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≤d | Popis |
1xx | InformaΦnφ k≤dy (nepou₧φvß se) |
| |
2xx | ┌sp∞ÜnΘ vy°φzenφ po₧adavku |
| |
200 OK | Po₧adavek byl ·sp∞Ün∞ zpracovßn |
201 Created | V²sledkem po₧adavku je nov∞ vytvo°en² objekt |
200 Accepted | Po₧adavek byl p°ijat, ale dosud nenφ zpracovßn |
200 No content | Po₧adavek byl ·sp∞Ün∞ zpracovßn, ale jeho v²sledkem nejsou ₧ßdnß data pro klienta |
| |
3xx | P°esm∞rovßnφ |
301 Moved Permanently | Po₧adovan² objekt byl trvale p°emφst∞n na jinou adresu |
302 Moved Temporarily | Po₧adovan² objekt byl doΦasn∞ p°emφst∞n na jinou adresu |
304 Not Modified | Objekt nebyl zm∞n∞n (odpov∞∩ p°i podmφn∞nΘm po₧adavku pomocφ hlaviΦky If-Modified-Since) |
| |
4xx | Chyba klienta |
400 Bad Request | èpatnß syntaxe dotazu |
401 Unauthorized | Objekt je dostupn² pouze po autorizaci |
403 Forbidden | Po₧adavek je v po°ßdku, ale server nemß povoleno jej vykonat |
404 Not Found | Po₧adovan² objekt nebyl na serveru nalezen |
| |
5xx | Chyba na stran∞ serveru |
500 Internal Server Error | Serveru se n∞co stalo a nem∙₧e vyplnit po₧adavek |
501 Not Implemented | Server nepodporuje metodu uvedenou v po₧adavku |
502 Bad Gateway | Server, pracujφcφ jako gateway, dostal Üpatnou odpov∞∩ od dalÜφho serveru |
503 Service Unavailable | Slu₧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