WWW, HTTP servery

Pavol Babinčák, xbabinc zavináč fi bodka muni bodka cz


Obsah


Protokol HTTP

HTTP (Hypertext transfer protocol) - jednoduchý protokol, pôvodne určený na prenos HTML (hyper text markup language) súborov na webe. Dnes používaný na prenos akýchkoľvek súborov vrátane binárnych.Vlastnosti protokolu:

Existuje viac verzií protokolu:

Metódy pre získavanie dát zo servera

Aj keď HTTP/1.x definuje viacero metód, najčastejšie sa používajú tieto dve:

Príklad GET metódy

Kladná odpoveď na dotaz GET metódou:
(pripojenie na server fadmin.fi.muni.cz, port 80)
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 03 Apr 2005 19:11:27 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=ISO-8859-2

<!-- zobrazujeme nahradni stranku FI -->
<?xml version="1.0"?>
...

Príklad zápornej odpovedi na GET dotaz:
(pripojenie na server fadmin.fi.muni.cz, port 80)
GET /neexistujuca HTTP/1.0

HTTP/1.1 404 Not Found
Date: Sun, 03 Apr 2005 19:14:41 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=ISO-8859-2

<?xml version="1.0"?>
...

Problém kódovania jazyka

HTTP hlavičky vs. HTML http-equiv

HTTP sa používa najčastejšie na prenos HTML (hypertext markup language) stránok. Pre zobrazenie správnej kódovej stránky dokumentu je potrebné predať klientovi kódovanie tohto súboru. HTTP definuje hlavičku Content-Type na určenie kódovania a MIME typu súboru. V prípade že je HTML súbor uložený lokálne, nieje možné zistiť kódovanie z hlavičky HTTP, preto v HTML existuje značka meta, ktorá nahradzuje HTTP hlavičky. Príklad tejto hlavičky: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">

Apache

Apache je jedným z najpoužívanejších web serverov od roku 1996. Podľa netcaft.com je používaný na vyše 70% serveroch. Je to open-source projekt Apache Software Foundation. Momentálne je posledná verzia 2.0.53.

Moduly

Webserver sa skladá zo samotného jadra http_core a modulov. Tie môžu byť prilinkované do Apache pri kompilácii, alebo stáť samostatne. Potom sa načítavajú pri štarte serveru. Okrem štandardných modulov existuje mnoho ďalších modulov, zoznam je na modules.apache.org. Niektoré moduly:

Kompilácia a inštalácia

Konfigurácia

Apache sa konfiguruje editáciou textových súborov. Tie sú veľmi dobre komentované. Je v nich možné použiť:

Po inštalácii Apache zo zdrojových kódov sa konfiguračný súbor nachádza v /etc/httpd/conf/httpd.conf. Pre prehladnosť je vhodné rozdeliť tento súbor do viacerých súborov (napr. pre virtuálne servery). V Debiane sa konfiguračné súbory nachádzaju v adresári /etc/apache2/. Niektoré súbory z tohto adresára:

CGI skripty

CGI (Common Gateway Interface) je technológia umožňujúca spúšťať programy (resp. spustiteľné súbory - shell skripty a pod.) na strane serveru a výstup posielať klientskému web browseru. CGI je štandard pre prenos dát medzi CGI programom a klientským prehliadačom.

Pre používanie CGI v Apache je treba do konfigurácie pridať načítavanie modulu mod_cgi, resp. mod_cgid. Pre Apache zo zdrojových kódov je to editácia httpd.conf

LoadModule cgi_module modules/mod_cgi.so #načítanie modulu
AddModule mod_cgi.c                      #aktivácia
AddHandler cgi-script .cgi               #pridanie akcie pre súbory s príponou cgi
ScriptAlias /cgi-bin/ "/var/www/cgi-bin" #alias, použitie prvej cesty v adrese má za následok použitie druhej - reálnej

Ešte treba povoliť spúštanie CGI v adresári:

<Directory "/var/www/cgi-bin">
Options ExecCGI
</Directory>

Sprístupnenie jedného dokumentu vo viacerých jazykoch

Protokol HTTP dáva klientovi možnosť špecifikovať niektoré vlastnosti dokumentu, ktorý požaduje. Server potom môže poslať dokument, ktorý najlepšie vyhovuje klientovým požiadavkám. Klient tieto požiadavky posiela v hlavičkách (ktoré vie Apache spracovať):

Pre výber vhodného dokumentu sú v Apache 2 implementácie:
Nevýhoda môže byť v tom, že pre každé kódovanie musíme vytvoriť samostatný súbor. Existujú tiež moduly do Apache, ktoré sa o toto starajú automaticky. Niektoré: mod_czech, mod_html, CSáček.

Virtuálne servery

Na jednom počítači je možné umiestniť viac virtuálnych serverov. Virtuálny server má vlastnú doménovú adresu (príp. IP adresu), takže vyzerá ako samostatný server. Virtuálne servery sa dajú riešiť dvoma spôsobmi:

SSL

SSL (Secure Socket Layer) je protokol medzi aplikačnou a transportnou vrstvou. Zabezpečuje autentizáciu serveru, prípadne i klienta, integritu, šifrovanie prenášaných dát. SSL používa asymetrickú kryptografiu pri autentizácii a symetrickú kryptografiu pre šifrovanie prenášaných dát v relácii. Server, prípadne aj klient, má jeden pár (súkromný, verejný) kľúč. Tie sa použijú pri ustanovení spojenia a dohode šifrovacieho symetrického kľúča.
Pretože vrstva SSL je umiestnená pod vrstvou HTTP, nieje ju možné použiť pri virtuálnych serveroch na báze mena. Je to preto, že pri týchto serveroch sa informácia o pripojení na konkrétny virtuálny server prenáša až v HTTP hlavičke, ktorá však má byť obalená SSL vrstvou.

Inštalácia SSL do Apache


Autentizácia

Pretože je HTTP protokol bestavový, je problém riešiť informácie o aktuálnom sedení. Na uchovanie týchto informácií sa dajú využiť vlastnosti HTTP:

Odkazy