Slu₧ba World-Wide Web je postavena na t°ech zßkladnφch technologiφch -- HTML, URL a HTTP. HTML je znaΦkovacφ jazyk, kter² slou₧φ k standardnφmu popisu obsahu a struktury webovsk²ch strßnek. URL je specißlnφ druh adres pou₧φvan²ch na Webu -- ka₧dß webovskß strßnka mß svoji jednoznaΦnou adresu prßv∞ v podob∞ URL. HTTP -- Hypertext Transfer Protocol -- je protokol pou₧φvan² p°i komunikaci mezi prohlφ₧eΦi a webovsk²mi servery. Pomocφ tohoto protokolu se k serveru p°enßÜφ URL strßnky, kterou u₧ivatel (p°es sv∙j prohlφ₧eΦ) po₧aduje, a naopak server pomocφ protokolu HTTP odesφlß u₧ivateli zp∞t strßnku zapsanou v HTML.
Pro sprßvnΘ pochopenφ princip∙ CGI-skript∙ je nezbytnß alespo≥ zßkladnφ znalost protokolu HTTP. Proto se v dneÜnφm pokraΦovßnφ serißlu podφvßme na zßkladnφ vlastnosti protokolu HTTP.
Protokol HTTP vychßzφ z architektury klient/server. Klient -- v naÜem p°φpad∞ prohlφ₧eΦ -- se spojφ se serverem a poÜle mu po₧adavek. Server jako reakci na klient∙v po₧adavek zasφlß odpov∞∩. P°esn² formßt po₧adavku a odpov∞di je definovßn ve specifikaci protokolu HTTP. Celou situaci mφrn∞ komplikuje to, ₧e dnes existujφ t°i verze protokolu -- 0.9, 1.0 a 1.1. Formßt po₧adavku a odpov∞di se v jednotliv²ch verzφch odliÜuje.
GET
uvedena cesta k po₧adovanΘmu
dokumentu. Pokud chceme pomocφ HTTP/0.9 zφskat nap°φklad dokument
http://www.server.cz/~krystof/linky.html
, musφme se
p°ipojit k poΦφtaΦi www.server.cz
na port 80 (standardnφ
port slu₧by WWW) a zaslat po₧adavek:
GET /~krystof/linky.htmlJako odpov∞∩ nßm p°ijde obsah souboru
linky.html
. VÜe si
m∙₧eme sami vyzkouÜet a zahrßt si na prohlφ₧eΦ. StaΦφ spustit telnet a
p°ihlßsit se k n∞jakΘmu serveru na port 80. Pak napφÜeme HTTP po₧adavek
a nechßme se p°ekvapit, co nßm server odeÜle zp∞t (viz obr. 2).
Na tomto mφst∞ musφme p°ipomenout, ₧e cesta za slovem
GET
nem∙₧e b²t prßzdnß a musφ v₧dy obsahovat alespo≥
lomφtko:
GET /Mo₧nß vßs napadlo, jak² dokument odeÜle server jako odpov∞∩, pokud v po₧adavku nenφ urΦen p°φmo soubor, ale pouze adresß° (nebo dokonce jen ko°enov² adresß° jako v naÜem p°φklad∞). V tomto p°φpad∞ WWW-server hledß v adresß°i soubor, kter² se jmenuje
index.html
,
default.html
Φi welcome.html
-- zßle₧φ na
konfiguraci. Pokud jej nalezne, odeÜle jej jako odpov∞∩. Pokud takov²
soubor neexistuje, odeÜle v²pis obsahu adresß°e (pokud to nenφ v
konfiguraci serveru zakßzßno).
JmΘna soubor∙, kterΘ se hledajφ v p°φpad∞ po₧adavku, kter² obsahuje
pouze jmΘno adresß°e, lze pro server Apache nastavit v konfiguraΦnφm
souboru srm.conf
pomocφ direktivy
DirectoryIndex
. Dφky tΘto vlastnosti m∙₧eme pou₧φvat URL
adresy tvaru http://www.server.cz/
.
metoda cesta_k_dokumentu HTTP/1.0 hlaviΦky prßzdnß_°ßdkaNejpou₧φvan∞jÜφ metodou je GET -- ta slou₧φ k zφskßnφ danΘho dokumentu ze serveru. DalÜφ dv∞ 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ß_°ßdkaOdpov∞∩ 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∞diStavov² 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°eci 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 OKP°ehled stavov²ch k≤d∙ a hlßÜenφ je v tabulce 1.
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) |
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 Φty°i 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ß_°ßdkaPou₧itφ tΘto hlaviΦky je povinnΘ kv∙li 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φ HTTP/1.1.
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 WWW-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φ.
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
ukazuje. Jako adresu je pot°eba uvΘst ·plnΘ
absolutnφ URL. Nap°.
Location: http://manes.vse.cz/~xkosj06/index.html
If-Modified-Since: Mon, 30 Mar 1998 12:00:00 GMT
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°.:
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT) Server: Apache/1.3b3