http://www.fi.muni.cz/~kas/p090/referaty/2002-jaro/www.html#cast1
WWW server
Martin Roller, xroller@fi.muni.cz
Obsah
Jméno Apache pochází ze slovního spojení "A PAtCHy
server". Původně byl totiž celý projekt postaven na existujícím
programu NCSA httpd a sérii záplat "patch files". Mnoho vývojářů si
tento název také spojuje se stejnojmenným označením indiánského kmene.
Apache je v součastnosti nejpoužívanějším WWW serverem. Podle průzkumu
společnosti Netcraft bylo v září letošního roku přibližně 8 miliónů
aktivních Apache WWW serverů, což tvoří 60.9% všech dotázaných serverů.
Druhý byl Microsoft s asi 4 milióny tedy 30.0%. Více o tomto výzkumu se
můžete dočíst na adrese
http://www.netcraft.com/survey.
Apache se stal nejoblíbenějším zřejmě díky tomu, že je zcela zdarma,
včetně zdrojových kódu a že nabízí největší flexibilitu přidáváním
modulů. Kromě toho se jedná o
velmi výkonný (nezávislé porovnání výkonnosti najdete na http://webcompare.internet.com)
a vysoce konfigurovatelný web server implementující poslední verze
protokolů, včetně HTTP/1.1 (RFC2616). Umožnuje psát vlastní moduly
pomocí Apache module API. Lze ho provozovat na mnoha operačních
systémech včetně Windows NT/9x, Netware 5.x, OS/2 a různých verzích
systému Unix.
Oficiální stránka projektu je na
adrese http://www.apache.org, kde
naleznete odkazy ke stažení Apache (http://httpd.apache.org)
a odkazy na související projekty (různé moduly, např. Java). Poslední
verze Apache jsou 1.3.23 (stabilní) a 2.0.16 Beta.
RPM balíky si můžete vyhledat na http://www.rpmfind.net.
Pro RedHat 7.2 byla k dispozici verze 1.3.20.
http://httpd.apache.org/dist/httpd/apache_1.3.23.tar.gz
Instalace je velmi jednoduchá a spočívá v provedení následujících
kroků:
$ ./configure --prefix=PREFIX --enable-module=most --enable-shared=max
$ make
$ make install
$ PREFIX/bin/apachectl start
Řetězec PREFIX určuje cestu kam bude Apache instalován - standardně je to /usr/local/apache.
Volba --enable-module=most zkompiluje Apache s většinou modulů kromě několika problémových (které nejsou dostupné pro všechny platformy).
V případě že chceme povolit jen konkrétní moduly napíšeme jejich jméno s parametrem --enable-module=jméno_modulu.
Pro Apache dále existuje řada dalších modulů nezahrnutých do standartní distribuce. Jejich seznam je veden na http://modules.apache.org.
Takto získané moduly se nastavují při kompilaci parametrem
$ ./configure --prefix=/path/to/apache --add-module=/path/to/mod_foo.c --enable-shared=foo
Kde v --add-module je specifikována cesta k modulu. Modul mod_foo.c bude zkopírován do src-modules-extra a zkompilován jako modul.
Takže může být později aktivován uvedením direktivy LoadModule v konfiguračním souboru httpd.conf.
Instalace vyžaduje asi 12MB dočasného prostoru na pevném disku. Po
instalaci zabírá Apache asi 3MB.
Detailní popis instalace, včetně jednotlivých přepínačů, naleznete v
souboru INSTALL, který je součástí distribuce.
Veškerá konfigurace se provádí v adresáři PREFIX/etc/:
$ vi PREFIX/etc/httpd.conf
$ vi PREFIX/etc/access.conf
$ vi PREFIX/etc/srm.conf
Konfigurační soubor httpd.conf je rozdělen do 3 částí.
Global Enviroment
ServerType - standalone - server je spoustěn samostatně a ne
přes inetd.
ServerRoot - cesta ke konfiguračním souborům serveru
MaxClients - maximální počet klientů
Listen - definuje na které adrese a portu server naslouchá
AddModule - slouží k aktivaci nahraných modulů, nebo k aktivaci
modulů zakompilovaných v Apache
LoadModule - slouží k načtení dynamického modulu
LoadModule php4_module modules/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .phtml .php
Načte a aktivuje modul pro jazyk PHP a přiřadí soubory .phtml a .php
jako aplikaci v jazyce PHP.
Main server configuration
ServerAdmin - udává emailovou adresu správce serveru
ServerName - jméno serveru
DocumentRoot - cesta ke kořenovému adresáři s dokumenty
Directory - pro nastavení vlastností zpřístupněného adresáře
<Directory "/home/*/public_html">
Options FollowSymLinks ExecCGI Includes
</Directory>
povolí symbolické odkazy, spouštění CGI skriptů a includování z
adresářů public_html v domovských adresářích uživatelů.
Dalším častým parametrem Options je Indexes, který povoluje zobrazení
výpisu adresáře, pokud není přítomen soubor definovaný v direktivě
DirectoryIndex - většinou soubor index.htm.
Další z voleb u adresáře vybraného parametrem jsou volby
Order a Allow které slouží pro zakázání resp. povolení přístupu k
dokumentům z tohoto adresáře. Tyto volby si může nastavovat i sám
uživatel uvedeme-li direktivu AccessFileName .htaccess . Pak se Apache
vždy zkontroluje obsah tohoto souboru v adresáři s dokumenty.
Virtual hosts
V této sekci jsou definovány virtuální servery které beží na tomto
počítači.
Virtuální servery slouží k provozu více serverů na jednom stroji. Máme
například server s adresou www.server.cz, na kterém
máme v adresářové struktuře podadresáře www.server.cz/adr1 a
www.server.cz/adr2 u nichž chceme, aby byly dostupné na adresách
www.adr1.cz a www.adr2.cz. Vzhledem k limitaci HTTP/1.0 protokolu, musí
mít server odlišnou IP adresu pro každý virtuální server.
Apache byl jedním z prvních serverů, který podporoval servery s
podporou rozlišování podle IP adresy. Současná verze
podporuje také rozlišování na základě jména.
Rozlišování podle jména vs. rozlišování podle IP adresy
Virtuální server založený na rozlišování IP adresy používá IP adresu
spojení k tomu, aby určil, který server klientovi poskytnout. Naopak
rozlišování na základě jména, které je součástí HTTP hlavičky, umožňuje
sdílet
mnoho serverů s jednou IP adresou.
Kompatibilita se staršími prohlížeči
Existují prohlížeče, které serveru neposílají dostatečné informace k
tomu, aby jednoznačně určil, o který server opravdu
klientovi jde. V tom případě server pošle stránky primárního serveru
pro danou IP adresu.
Příklad serveru rozlišujícího podle jména:
...
Port 80
ServerName server.domain.tld
NameVirtualHost *
<VirtualHost *>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost *>
DocumentRoot /www/subdomain
ServerName www.sub.domain.tld
...
</VirtualHost>
Příklad serveru rozlišujícího podle IP adresy:
...
Port 80
ServerName server.domain.tld
<VirtualHost 111.22.33.44>
DocumentRoot /www/domain
ServerName www.domain.tld
...
</VirtualHost>
<VirtualHost 111.22.33.55>
DocumentRoot /www/otherdomain
ServerName www.otherdomain.tld
...
</VirtualHost>
V případě že chceme virtuální server s podporou ssl uvedeme VirtualHost
jméno_serveru:443 čímž určíme že server bude naslouchat na portu 443
tj. SSL.
Logování
Nejdůležitějším souborem z hlediska logování je soubor error.log, jehož
jméno a umístění je definováno direktivou ErrorLog. Do tohoto souboru
Apache
zasílá diagnostické informace a všechny chybové záznamy, které se při
startu či běhu vyskytnou. Je to také první místo, kam bychom se měli
podívat, pokud nám něco nefunguje tak, jak potřebujeme.
V hlavním konfiguračním souboru lze také nastavit úroveň logování
pomocí direktivy LogLevel. Lze vybrat jednu z mnoha úrovní (debug,
info, notice, warn, error, crit, alert, emerg).
Dále lze upravit formát, ve kterém budou chybové hlášky ukládány.
Typický příklad jednoho záznamu souboru error.log:
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
Dalším souborem je access.log. Do toho se ukládají veškeré požadavky
zaslané serveru.
Typický příklad jednoho záznamu souboru access.log:
127.0.0.1 - - [01/Jan/2002:12:01:05 +0100] "GET / HTTP/1.1" 406 2837
ftp://ftp.modssl.org/source/mod_ssl-2.8.7-1.3.23.tar.gz
ftp://ftp.openssl.org/source/openssl-0.9.6c.tar.gz
SSL slouží k bezpečnému přenosu dat přes HTTP protokol. Spojení je
šifrované a tudíž se tím výrazně snižuje možnost zneužití
odposlechnutých informací. SSL používá asymeterickou kryptografii s
veřejným a tajným klíčem. Pro ověření veřejného klíče je klíč podepsán
některou veřejnou certifikační autoritou. Pro zkonfigurování mod_ssl a
pro zprávu klíčů potřebujeme openssl.
Nejprve zkompilujeme openssl:
$ cd openssl-0.9.6c
$ ./config
$ make
$ cd ..
a nyní se můžeme pustit na mod_ssl a Apache
$ cd mod_ssl-2.8.x-1.3.x
$ ./configure --with-apache=../apache_1.3.x --with-ssl=../openssl-0.9.x --prefix=/path/to/apache
$ cd apache_1.3.x
$ make
$ make certificate
$ make install
Pro aktivování ssl modulu jsou důležité parametry:
port - pro SSL je vyhrazen port 443
SSLEngine on - aktivuje ssl engine
SSLCertificateFile - určuje cestu k veřejnému certifikátu serveru
SSLCertificateKeyFile - určuje cestu k tajnému klíči serveru
Při spouštění Apache s podporou SSL je nutné použít apachectl startssl
místo apachectl start
Pomocí následujících voleb umožníme spouštění skriptů z
adresáře /var/www/cgi-bin
skripty voláme díky aliasu následovně:
http://servername/cgi-bin/jmeno_skriptu.cgi
LoadModule cgi_module modules/mod_cgi.so
AddModule mod_cgi.c
AddHandler cgi-script .cgi
ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
<Directory "/var/www/cgi-bin">
Options ExecCGI
</Directory>
Další možností vytváření dynamických stránek je použití
modulu pro php nebo mod_perl.
Modul mod_czech umožňuje webovskému serveru Apache
interně konvertovat odesílané textové dokumenty do klientem podporované
znakové sady - tj. bez nutnosti spouštět kódovací CGI program, jehož
volání k výkonu serveru zrovna nepřispívá. Modul mod_czech se nejprve
pokusí automaticky detekovat typ klienta, a poté mu vyžádaný dokument
pošle překódovaný do správné znakové sady. Neznámému klientovi pošle
dokument v ASCII, nebo si od něj volbu znakové sady explicitně vyžádá.
Kontext (zvolená znaková sada) je s takovým klientem udržován
připojováním prefixu k URL dokumentů (např. "href=/win/index.htm").
Modul je schopen překódovat textové dokumenty (HTML, plain text apod.),
"Server Side Includes" (SSI, shtml, phtml) dokumenty, vstupy i výstupy
CGI programů, data z formulářů i všechna ostatní serverem zpracovávaná
textová data. Prefixy se přidávaji k dokumentům pouze v případě, že si
to klient na stránce pro změnu znakové sady explicitně vyžádal. Při
spouštění CGI programů se do environmentu přidávají další proměnné, z
kterých může spouštěný program zjistit např. název znakové sady, v
které data od serveru přijímá, a znakovou sadu, v které má svůj výstup
serveru předat.
mod_czech aktuálně podporuje následující znakové sady:
US-ASCII
ISO-8859-1
UTF-8 (Unicode UTF-8)
ISO-8859-2
windows-1250
x-mac-ce (Macintosh CE)
CP852 (PC Latin-2)
x-kam-cs (bratři Kameničtí)
CSN_369103 (KOI8CS)
Modul sestává ze dvou částí: ze samotného zdrojového textu
mod_czech.[ch] a z úprav do jádra samotného Apache. Tyto úpravy jsou
distribuovány jako diff file pro program patch. Po aplikaci patche je
třeba Apache překompilovat s následující direktivou.
--activate-module=src/modules/czech/libczech.a --disable-shared=czech
Základní informace, mailový archiv a aktuální verze
modulu mod_czech naleznete na adrese
http://www.intersoft.cz/mod_czech/. Nejnovější verze modulu (včetně
alfa a beta verzí) jsou k dispozici na adrese ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/mcz.
kHTTPD je HTTP server který je k dispozici jako modul
pro linuxové jádro. kHTTPD je primárně určen pro statické stránky a
obrázky, dotazy na dynamické stránky umí přesměrovat na jiný
plnohodnotný http server (např. Apache). Pro zkompilování je nutné při
kompilaci zaškrtnout volbu Kernel httpd acceleration v menu networking
options.
Příklad zavedení khttpd:
modprobe khttpd
echo 80 > /proc/sys/net/khttpd/clientport
echo 8080 > /proc/sys/net/khttpd/serverport
echo /var/www > /proc/sys/net/khttpd/documentroot
echo php > /proc/sys/net/khttpd/dynamic
echo shtml > /proc/sys/net/khttpd/dynamic
echo 1 > /proc/sys/net/khttpd/start
V tomto případě nastavíme khttpd jako pomocný server
pro apache který beží na portu 80. kHTTPD běží na portu 8080.
Kořenový adresář s dokumenty je ve /var/www. Všechny stránky s
koncovkou php a shtml jsou označeny jako dynamické a přesměrovány na
server na portu 80.
Protokol obecně definuje pravidla pro komunikaci mezi
dvěma partnery. Definuje tvar přenášených informací, možnosti a
náležitosti požadavku i odpovědi.
Hypertext Transfer Protokol (HTTP) je protokol aplikační vrstvy.
Používá se pro distribuované hypermediální informační systémy. Pro
službu WWW se používá od roku 1990.
První používaná verze HTTP 0.9 byla jednoduchá. Zajišťovala pouze
přenos dat po Internetu bez dalších doplňkových informací o přenášených
datech. Klient musel odhadnou podle koncovky souboru o jaká data se
jedná. Brzy se ukázalo, že tato varianta nepostačuje a nastoupila verze
nová HTTP 1.0. Verze 1.0 se snažila doplnit popisující informace do
dotazu a odpovědi a použila pro to již existující formát MIME
(Multipurpose Internet Mail Extension). Rozšířila tvar dotazu a
odpovědi o standardizované doplňující informace charakterizující
přenášená data ve tvaru typ/podtyp. HTTP 1.0 je definováno v RFC 1945.
S rozvojem služby WWW se objevovaly další požadavky na HTTP protokol.
Šlo především o práci hierarchickou strukturou proxy, využívání cache,
požadavek na trvalé spojení mezi klientem a serverem a požadavky na
virtuální servery. Tyto nedostatky řeší nová verze protokolu HTTP 1.1,
která je definována v RFC 2068 v lednu 1997.
Vlastní přenos dat zajišťuje protokol vrstvy nižší např. TCP. HTTP
protokol tedy předpokládá, že na jednom konci předá data pro přenos a
na druhém konci obdrží data v nezměněné podobě.
Pomocí HTTP protokolu komunikuje na příslušných portech klient se
serverem. HTTP server je obvykle spuštěn na portu 80. Je možné ho ale
provozovat i na portu jiném.
Příklad dotazu:
GET /index.html HTTP/1.0
Accept: text/html
Accept: image/gif
User-Agent: mozilla
Příklad kladné odpovědi:
HTTP/1.0 200 OK
Server: Apache
Date: Tue, 26 Mar 2002 10:23:43 GMT
Accept-ranges: bytes
Last-modified: Fri, 22 Dec 2001 17:41:00 GMT
Content-length: 1032
Content-type: text/html
Příklad záporné odpovědi:
HTTP/1.0 404 Not found
Server: Apache
Date: Tue, 26 Mar 2002 10:12:04 GMT
Content-length: 207
Content-type: text/html
Proxy a gateway
Na cestě mezi originálním WWW klientem a originálním WWW serverem se
často vyskytují prostřednící ve formě proxy nebo gateway.
Proxy
Proxy je program, který pracuje současně jako server i klient. Jeho
úkolem je vydávat se za klienty, kteří stojí za proxy, tj. posílat
jejich dotazy do Internetu svým jménem. V případě proxy nenavazuje
originální klient spojení přímo s originálním serverem, ale se
serverovou částí proxy. Ta přepíše celý dotaz nebo jeho část a předá
jej svým jménem směrem k originálnímu serveru. Opačným směrem pak
přijme odpověď a předá ji originálnímu klientovi. Všimněte si, že dotaz
klienta v tomto případě obsahuje celé URL včetně specifikace serveru.
Klient stojící za proxy totiž nemusí umět ani přeložit jméno počítače
na IP adresu. Teprve proxy provede překlad. Naváže spojení se serverem
a v dotazu specifikuje pouze cestu k souboru. Dostane-li proxy
požadavek v HTTP protokolu, předá je dále opět v HTTP protokolu.
Proxy si může obdržené odpovědi ukládat na disk. V případě výskytu
stejného požadavku pak může využít cachovaná data z disku a zkrátit tak
cestu k získání dokumentu.
Gateway
Gateway na rozdíl od proxy provádí konverzi mezi dvěma protokoly.
Obdrží požadavek jako cílový server a pokud je potřeba provede překlad
požadavku do jiného protokolu např. ftp.
Protokol HTTP přímo podporuje gateway, proto se v URL používá název
příslušného protokolu.
Metody protokolu
Metoda určuje druh služby, kterou klient od serveru požaduje. Metoda se
uvádí velkými písmeny. Server nemusí vždy všechny metody podporovat.
Při dotazu nepodporovanou metodou pak vrací chybové hlášení.
OPTIONS
Metoda OPTIONS představuje dotaz na možnosti komunikace spojené s
uvedeným URL. Metoda umožňuje klientovi určit možnosti a omezení
spojené se zdrojem nebo schopnostmi serveru. Pokud je URL v dotazu ve
tvaru "*", pak se jedná o dotaz na možnosti serveru jako celku.
GET
Metoda GET představuje požadavek na poslání dokumentu určeného pomocí
URL. V souvislosti s proxy se může metoda GET změnit na "podmíněný
GET", která požaduje poslat dokument pouze za určitých podmínek
definovaných v hlavičce dotazu.
HEAD
HEAD metoda je identická s metodou GET, server však nemusí posílat tělo
odpovědi. Metodu je možné použít k získání doplňkových informací o
dokumentu, často se používá k testování hypertextových linek, jejich
dostupnosti a poslední modifikace. Klient může získané hlavičky
analyzovat a případně požádat o data novým dotazem GET (např. test zda
dokument není příliš dlouhý).
POST
POST metoda se používá v případě, kdy má cílový server přijmout data z
požadavku. Skutečná funkce metody závisí na URL s ní spojené. Výsledkem
POST metody může být poslání mailu, předání dat do procesu, který data
zpracuje, rozšíření databáze. Posílaná data nejsou nijak omezená a je
možné v hlavičkách tělo zprávy popsat.
PUT
PUT metoda představuje požadavek na uložení posílaných dat pod
specifikované URL na server. Takto uložená data budou dostupná např.
následnými dotazy GET. Metoda PUT předpokládá, že uložení dat do
souboru na server provádí přímo server nikoli externí aplikace (CGI
program).
DELETE
Požadavek na zrušení dokumentu na serveru. Rušený dokument je
specifikován v URL.
TRACE
Metoda použitá k testování originálního serveru. Originální server má
vrátit klientovi kladnou odpověď bez dat. WWW servery používané v
současné době podporují vždy metody GET, POST a HEAD.
URL v dotazu
Url v dotazu může být uvedeno ve tvaru:
Hvězdička znamená, že se požadavek nevztahuje na
dokument, ale na server jako celek. Např.:
OPTIONS * HTTP/1.1
Absolutní URL se používá, pokud je požadavek směrován na proxy. Např:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
Nejčastěji se v dotazu používá absolutní cesta, která identifikuje
soubor na originálním serveru, se kterým bylo navázáno spojení. Verze
HTTP 1.1 posílá navíc jméno nebo IP adresu originálního serveru v
hlavičce Host. Např:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Absolutní cesta nesmí být prázdná, pro root serveru se musí uvést znak
"/".
Výsledkové kódy
Výsledkové kódy jsou rozděleny do pěti tématických skupin podle své
první číslice.
1xx - informační - Požadavek byl
obdržen.
100 Continue
Klient může pokračovat v posílání požadavku. Jde o meziodpověď od
serveru. Po obdržení celého požadavku ho server začne obsluhovat a
pošle konečný výsledkový kód.
101 Switching Protokols
Server rozuměl požadavku a mění protokol podle specifikace v hlavičce
Upgrade.
2xx - úspěch - Dotaz byl serverem pochopen a akceptován.
200 OK
Dotaz byl obsloužen bez chyb. Server posílá odpověď.
201 Created
Výsedkem zpracování dotazu bylo vytvoření nového objektu, který lze
identifikovat pomocí URL. URL vytvořeného dokumentu je posíláno v těle
odpovědi.
202 Accepted
Dotaz byl přijat, jeho zpracování však dosud neskončilo. Klient nemusí
čekat na dokončení.
203 Non-Autoritative Information
Vrácené meta informace nejsou poslané z originálního serveru.
204 No Content
Dotaz byl akceptován a v pořádku obsloužen, nevznikla však žádná data,
která by server klientovi poslal.
206 Reset Content
Server obsloužil požadavek a klient má nastavit původní obsah
dokumentu, který předpokládá vložení uživ. dat.
3xx - přesměrování - Klient musí provést další akce, aby získal
požadovaný dokument.
300 Multiple Choices
Požadovaný dokument je dostupný na několika místech, klient musí vybrat
jeden z dokumentů a znovu vyslat dotaz.
301 Moved Permanently
Objekt byl trvale přestěhován na nové URL (server je oznámí v hlavičce
Location). Klient se musí zeptat na novém místě.
302 Moved Temporarily
Objekt byl dočasně přesunut jinam. Klient se musí obrátit na nové
místo, neměl by si však například přepisovat URL objektu ve svých
záložkách, protože přemístění je jen dočasné.
303 See Other
Odpověď je dostupná na jiném URL. Není však náhradou za URL původní.
304 Not Modified
Server odpoví tímto kódem, pokud klient poslal podmíněný dotaz GET na
dokument, který má uložený v cache a odpovídající dokument na
originálním serveru nebyl modifikován.
305 Use Proxy
Požadavek musí být znovu poslám prostřednictvím proxy uvedené v URL.
4xx - klientova chyba - Klient položil chybný dotaz nebo nemá
oprávnění získat dokument požadovaný v dotazu.
400 Bad Request
Chybná syntax dotazu.
401 Unauthorized
Obsloužení dotazu je vázáno na určité identifikační požadavky, které
klient nesplnil.
402 Payment Required
Tento kód je rezervován pro budoucí použití.
403 Forbidden
Server má od správce zakázáno odpovídat na dotaz.
404 Not Found
Objekt s požadovaným URL neexistuje. Tento chybový kód je nejčastější.
Příčinou může být buď překlep v URL nebo zánik objektu.
405 Method Not Allowed
Použitá metoda není pro uvedené URL povolena.
5xx - chyba serveru - Server není z nějakého důvodu schopen
obsloužit požadavek.
500 Internal Server Error
Během zpracování dotazu došlo v programu serveru k jakési blíže
neurčené chybě.
501 Not Implemented
Server nepoznal metodu, kterou je poslán požadavek.
502 Bad Gateway
Chybu 502 pošle zprostředkující server, pokud na váš dotaz dostal od
původního serveru špatnou odpověď.
503 Service Unavailable
Server momentálně nedokáže váš dotaz obsloužit - například je přetížen
nebo právě probíhá jeho údržba. Chyba je dočasná a pokud později svůj
dotaz zopakujete, máte šanci, že budete vyslyšeni.
504 Gateway Timeout
Server pracující s proxy nebo gateway nedostal včas odpověď, aby mohl
vyřídit váš požadavek.
505 HTTP Version Not Supported
Server nepodporuje verzi protokolu použitou v požadavku.
Hlavičky HTTP
Hlavičky HTTP protokolu mají tvar podobný hlavičkám elektronické pošty:
název hlavičky: hodnota[;parametr=hodnota] CRLF
Každá hlavička tedy začíná na samostatném řádku. Parametry jsou
nepovinné, používají se jen u některých hlaviček.
Příklad hlaviček:
Content-length: 1032
Content-type: text/html; charset=ISO-8859-2
Hlavičky jsou rozděleny do tří skupin.
Obecné hlavičky poskytující univerzální informace o zprávě.
Hlavičky dotazu/odpovědi, které popisují dotaz/odpověď.
Hlavičky těla,které popisují tělo zprávy. Na pořadí hlaviček nezáleží,
nicméně ve standardu se doporučuje, aby hlavičky zprávy byly uspořádány
podle svých tematických kategorií v uvedeném pořadí.
Obecné hlavičky
Date
informuje o okamžiku vytvoření zprávy. Doporučuje se používat pro zápis
času formát, definovaný v RFC 822:
Sun, 06 Nov 1994 08:49:37 GMT
Pragma
umožňuje přidávat ke zprávě instrukce, jejichž zpracování je
implementačně závislé. Například zmíněné
Pragma: no-cache zakazuje umístit zprávu ve vyrovnávací paměti. HTTP
1.1 nahrazuje tuto hlavičku hlavičkou Cache-Control.
Mime-Version
hlavička specifikuje použitou verzi MIME při konstrukci zprávy. HTTP
1.1 přídává další hlavičky:
Connection
umožňuje odesilateli specifikovat podmínky spojení. Například
Connection: close umožňuje vyslat signál, že spojení bude po vyřízení
požadavku ukončeno. HTTP 1.1 aplikace, které nepodporují trvalé spojení
musí vložit tuto hlavičku do každé zprávy.
Transfer-Encoding
definuje použitou transformaci (pokud je použitá) pro zajištění
bezpečného přenosu. Transformace se používá na celé tělo zprávy. Tělo
zprávy se např. rozdělí na několik částí, každou se svými hlavičkami.
To umožňuje postupně posílat dynamicky vznikající odpověď.
Via
hlavička je seznamem protokolů a uzlů,přes které projde dotaz od
originálního klienta k originálnímu serveru. Používá jí proxy a
gateway. Je analogií hlavičky Received v elektronické poště.
Hlavičky dotazu
Authorization
slouží pro autentizaci uživatele.
From
elektronická adresa uživatele, řídícího činnost klienta. Lze ji použít
například pro zaznamenávání transakcí.
If-Modified-Since
se používá především pro aktualizaci obsahu vyrovnávací paměti. Je-li
přítomna tato hlavička, je dotaz považován za podmíněný. Hodnotou
hlavičky je časový údaj a dotaz znamená "dokument mne zajímá jen pokud
se změnil od tohoto okamžiku". Jestliže v dokumentu není nic nového,
server odpoví 304 Not Modified. V takovém případě lze použít verzi z
vyrovnávací paměti. Došlo-li ke změně dokumentu, chová se server
stejně, jako při normálním nepodmíněném dotazu.
Referer
oznamuje URL zdroje, ze kterého pochází URL právě kladeného dotazu.
Pokud například ze stránky http://www.kdesi.cz/home.html uživatel
vybere značku <a href=top.html>, vznikne dotaz
GET http://www.kdesi.cz/top.html HTTP/1.0
Referer: http://www.kdesi.cz/home.html Tato informace může být užitečná
například při chybných odkazech. Jestliže se změnilo URL některého
dokumentu, můžete díky hlavičce Referer identifikovat stránky, které se
odkazují na původní (nyní již neplatné) URL. pirátství (viz strana
odkaz).
User-Agent
umožňuje klientovi představit se. Příklad:
User-Agent: (X11; I; Linux 1.2.11 i586) Dotaz byl vznesen klientem
Netscape verze 2.0 beta 3. Jak vidíte, Netscape podal také informace o
operačním systému, ve kterém pracuje. HTTP 1.1 přidává další hlavičky:
Accept
specifikuje požadovaný typ dat v odpovedi, případně preference formátů.
Hvězdička se použije pro skupinu např. image/* pro libovolný formát
obrázku. Hlavička může obsahovat parametr q=n, kde n je číslo od 0 do
1. Parametr q určuje preferenci typů, menší číslo znamená vyšší
preferenci. Implicitní hodnota q je1. Např:
Accept: text/html; q=0.3, text/plain; q=0.7, text/x-dvi znamená servře
máš-li pošli mi odpověď ve formátu text/html, nemáš-li pak ve formátu
text/plain a pokud nemáš ani ten pošli alespoň formát text/x=dvi.
Host
uvádí jmého serveru a případně port, na který je směrován požadavek.
Např:
Host: info.pvt.net:8087
Accept-Charset
specikuje, která znaková sada je pro klienta přijatelná v odpovědi. V
hlavičce se uvádí znakové sady s případnou preferencí obdobně jako v
hlavičce Accept. Např:
Accept-Charset: iso-8859-2, iso-8859-1;q=0.8
Accept-Encoding
specifikuje kódování přijatelné klientem. Kódování v tomto případě
znamená např. kompresi. Např:
Accept-Encoding: gzip
Hlavičky odpovědi
Location
správné umístění odpovědi. Tvoří doplněk kódů ze skupiny 3xx,
oznamujících přemístění dokumentu. Např:
HTTP/1.1 301 Moved Permanently
Location: http://www.abc.cz/text.html
Server
identifikuje programové vybavení serveru. Pokud klient zjistí, že
server používá "ten pravý" program, může pak požadovat nějaké
nestandardní služby.
WWW-Authenticate
stanoví způsob prověrky oprávnění pro daný cíl. Tato hlavička je
povinným doplňkem návratového kódu 401 Unauthorized. HTTP 1.1 přidává
další hlavičky:
Retry-After
používá se spolu s odpovědí 503 (service Unavailable) a říká jak dlouho
asi bude server nedostupný. Čas se uvádí v počtu sekund nebo ve formátu
definovaném RFC 822.
Hlavičky těla
Allow
seznam metod, které lze použít pro získání dokumentu - např.
Allow: GET, HEAD
Expires
čili "spotřebujte do". Hodnotou této hlavičky je časový údaj, udávající
okamžik vypršení platnosti dokumentu. Po jeho uplynutí je dokument
považován za neplatný a je zakázáno ukládat jej do vyrovnávacích
pamětí.
Last-Modified
okamžik poslední změny v datech.
Content-Encoding
je jednou z hlaviček, převzatých od poštovního MIME standardu.
Oznamuje, jakým způsobem je kódováno tělo dokumentu. Hodnotou je název
některého z MIME kódování, řekněme Content-Encoding: x-gzip
Content-Length
udává délku těla v bajtech (přesněji oktetech).
Content-Length: 5216
Content-Type
určuje formát posílaných dat. Tato hlavička by neměla v odpovědi
chybět, neboť podle ní se klient rozhoduje, jak obdržený dokument
uživatelovi zobrazit či nezobrazit a raději uložit na disk. Hodnotou je
MIME dvojice typ/podtyp. Některé typy jsou blíže specifikované pomocí
parametrů. Hlavička má tvar:
Content-Type: typ/podtyp[;parametr=hodnota;...]
Nejdůležitějším parametrem (u českých textů) je Charset - specifikace
znakové sady. Klientský program by měl použít tuto informaci k výběru
správné znakové sady nebo překódování dokumentu. Výsledkem by měl být
čitelný dokument. Příklad:
Content-Type: text/html;Charset=iso-8859-1 HTTP 1.1 přidává další
hlavičky:
Content-Range
posílá se s jednotlivými částmi odpovědi, pokud je tato rozdělena do
částí. Určuje kam patří dotyčná část a velikost celé odpovědi. Např:
Content-Range: 0-499/1234 pro první 500 bytů odpovědi, které je dlouhá
1234 bytů.