WWW server

Martin Roller, xroller@fi.muni.cz


Obsah


Apache

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.

Apache - instalace, konfigurace

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


SSL vrstva

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

CGI skripty

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.

mod_czech

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.

Kernelový httpd

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.

HTTP protokol

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