HTTP (HyperText Transfer Protocol) je protokol aplikačnej vrstvy. Pôvodne bol navrhnutý na prenos hypertextových dokumentov, neskôr pribudla možnosť prenášať aj iný obsah. Štandardne používa port 80 a TCP. Jedná sa o bezstavový protokol, čiže každá požiadavka od klienta musí obsahovať všetky potrebné informácie. Spojenie vždy iniciuje klient.
GET / HTTP/1.1 Host: localhost
HTTP/1.1 200 OK Date: Sat, 12 Nov 2011 17:49:47 GMT Server: Apache/2.2.21 (Fedora) Last-Modified: Sat, 12 Nov 2011 17:49:20 GMT ETag: "82b07-61-4b18d41d9ffd4" Accept-Ranges: bytes Content-Length: 97 Connection: close Content-Type: text/html; charset=UTF-8 <html> <head> <title>Test Page</title> </head> <body> This is test page. </body> </html>
V súčasnosti najpoužívanejší HTTP server. Základná funkcionalita je ľahko rozšíritelná pomocou modulov. V súčasnosti je vo verzii 2.2. Je to open source - Apache License. Domovská stránka projektu je httpd.apache.org
Inštalácia (Fedora):
# yum install httpd
/etc/httpd/conf/httpd.conf
Niektoré dôležité konfiguračné volby:
ServerNamemeno serveru (napr.: www.example.com)
DocumentRootmiesto, kde sa budú hľadať požadované www stránky (napr.: "/var/www/html")
KeepAlivepovoliť/nepovoliť perzistentné spojenia
MaxKeepAliveRequestsmaximálne množstvo požiadavkov na perzistentné spojenie
Moduly rozširujú základnú funkcionalitu webového servera. Všetky dostupné moduly sa nachádzajú v adresári /etc/httpd/modules. Konfigurácia sa nachádza v /etc/httpd/conf.d/meno_modulu.conf.
Príklady modulov:Apache umožňuje prevádzkovať viacero domén súčasne. Slúžia na to takzvané virtuálne servery. HTTP všetky servery môžu bežať na rovnakom porte (typicky 80). Ktorý virtuálny server má obslúžiť HTTP požiadavku sa zistí podľa "Host: www.hostname.net" v hlavičke.
SSL je medzivrstva medzi transportnou a aplikačnou vrstvou. Zabezpečuje šifrovanú komunikáciu medzi klientom a serverom. Využíva sa asymetrická kryptografia.
Tento modul poskytuje SSL/TLS pre Apache server. HTTPS typicky beží na porte 443, čiže je bez problémov možné prevádzkovať web zabezpecený SSL a jeho nezabezpečenú variantu.
konfigurácia (Fedora):
/etc/httpd/conf.d/ssl.conf
SSLEngine On # zapína SSL SSLCertificateFile certifikat.crt # certifikát servera SSLCertificateKeyFile sukromny_kluc.key # privátny kľúč
Apache zvláda prevádzkovať viacero domén na jednom servery, jednej IP, a jednom porte. Pri použítí SSL však nastáva jeden problém. Klient po úvodnom TCP handshaku iniciuje ešte SSL handshake. Toto sa logicky deje ešte pred poslaním HTTP požiadavky, ktorá obsahuje aj potrebnú "Host:" hlavičku. SLL handshake vyžaduje, aby server poslal svoj certifikát klientovi, lenže v danej chvíli ešte server nevie s ktorým virtuálnym serverom chce klient komunikovať a preto ani nevie, ktorý certifikát má vlastne poslať.
Existuje niekoľko možných riešení tejto situácie:
1. poslať certifikát najnavštevovanejšej domény, tj. prvý certifikát uvedený v konfigurácii. Naivné riešenie, kedy teoreticky väčšina návštevníkov nezaznamená žiadny problém a všetko bude v pohode. Nevýhoda je, že návštevníci iných domén dostanú zlý certifikát a pravdepodobne upozornenie WWW prehliadača, že certifikát je pre danú doménu neplatný.
2. prevádzkovať každú doménu na inom porte. Nepohodlné pre užívateľov.
3. prideliť každému virtuálnemu serveru svoju vlastnú verejnú IP adresu. Toto môže byť problém, lebo IPv4 adries je nedostatok a IPv6 zatiaľ nie je dosť rozšírené.
4. SNI (Server Name Indication) - rozšírenie SSL/TLS. Klient špecifikuje doménu v prvom kroku handshaku (ClientHello). Toto rozšírenie musí byť podporované na strane klienta aj na strane serveru.
5. jeden certifikát pre viacero domén (subjectAltName). Problém je, že domény môžu vlastniť rôzni majitelia. Je potrebné nájsť CA, ktorá taký certifikát podpíše. Ak je potrebné hostovať nejakú novú doménu, ktorá vyžaduje HTTPS, je potrebné znovu vydať certifikát rozšírený o nové doménové meno.
Jedná sa o protokol na prepojenie externých aplikácii s webovým serverom. Toto umožňuje delegovať požiadavok klienta na externú aplikáciu, typicky skript, ktorý vygeneruje stránku, ktorá sa vráti klientovi ako HTTP odpoveď. Kedysi to bol jediný spôsob ako generovať dynamické stránky.
Tento spôsob autentizácie je priamo súčasťou HTTP protokolu. Jeho výhodou je, že ho podporuje drtivá väčšina prehliadačov. Nevýhodou je, že meno a heslo sa prenáša nešifrovane a server nemá možnosť nariadiť klientovi odhlásenie.
Dáta, ktoré pošle server klientovi a ten ich pri ďalšej návšteve toho istého serveru serveru pošle naspäť. Typicky sa používajú na rozlíšenie návštevníkov, udržanie obsahu nákupného košíka a pod.