WWW, HTTP servery

Ľuboš Kardoš, 256767@mail.muni.cy

Obsah

Protokol HTTP

Hypertext transfer protocol (HTTP) je aplikačný protokol určený na získavanie hypertextových dokumentov. Pôvodne bol vývoj HTTP koordinovaný organizáciami Worl Wide Web Consortium (W3C) a Internet Engineering Task Force (IETF). Protokol je založený na architektúre klient-server. Klientom je napríklad webový prehliadač, ktorý sa pripojí k webovému serveru a prostredníctvom HTTP zadá svoj požiadavok a server odošle odpoveď. Protokol je bezstavový. Na vytváranie spojenia sa najčastejšie používa protokol TCP/IP a port 80, hoci HTTP si tento protokol nevynucuje.

V súčastnosti najpoužívanejšie verzie HTTP sú HTTP/1.0 (1996, RFC 1945), ktorý používa samostatné spojenie na stahnutie každého dokumentu a HTTP/1.1, ktorý viacnásovne využíva jedno spojenie. Napríklad využije jedno spojenie na stiahnutie html dokumentu a obrázkov nachádzajúcich sa v tomto dokumente. Preto HTTP/1.1 je rýchlejší, lebo netrávi čas vytváraním spojení.

Príklad komunikácie pomocou HTTP

Požiadavok

GET / HTTP/1.1
Host www.google.com
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009090216 Ubuntu/8.04 (hardy) Firefox/3.0.14
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.7,de;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive


Požiadavok sa začína určením metódy. Povolené hodnoty sú GET, POST, HEAD, PUT, DELETE, TRACE CONNECT.

GET: Požiadavok na zadaný objekt.
POST: Odosiela uživatelské dáta na server a získava zadaný objekt.
HEAD: To isté ako GET, ale nezískava sa od serveru telo správy iba hlavičky.
PUT: Nahráva dáta na server.
DELETE: Maže dáta zo serveru.
TRACE: Server odošle požiadavok naspäť klientovi, tak može klient zistit, čo do požiadavku pridali alebo zmenili servery po ceste.
CONNECT: Spojí sa s objektom cez uvedený port. Používa sa pri prechode cez proxy a pre stanovenie kanálu SSL.

Ďalej sa požiadavok skladá z hlavičiek, ktoré pridavajú niektoré informácie, ako napríklad akceptovaný typ obsahu, jazyk, kódovanie a iné.

Odpoveď

HTTP/1.1 200 OK
Date Sun, 25 Oct 2009 20:41:55 GMT
Expires -1
Cache-Control private, max-age=0
Content-Type text/html; charset=UTF-8
Content-Encoding gzip
Server gws
Content-Length 3455
X-XSS-Protection 0

Odpoveď sa začína stavovým kódom. Číslica na mieste stoviek určuje typ kódu.

1xx: Informačné
2xx: Úspech
3xx: Presmerovanie
4xx: Chyba na strane klienta
5xx: Chyba na strane servera

Ďalej takisto nasledujú hlavičky informujúce o typu obsahu dĺžke, obsahu a iné.

Apache

Najpopulárnejší HTTP server. Získame ho vo forme inštalačného balíčku a nainštalujeme. Na ovládanie serveru používame príkaz apachectl (apache2ctl). Pre spustenie použijeme apachectl start, pre reštartovanie apachectl restart.

Konfigurácia

Konfiguračné direktívy

ServerRoot: Určuje hlavný adresár, kde sa majú hľadať konfiguračne súbory.
KeepAlive: Umožnuje vybavyť viacej požiadaviek počas jedného spojenia.
Listen: Definuje na akom porte a adrese bude server príjimať požiadavky.
ServerAdmin: Udáva dns meno, prípadne ip adresu serveru.
DocumentRoot: Určuje koreňový adresár s dokumentami.

Moduly

Moduly rozširujú funkčnost serveru. Moduly sa delia na interné(sú vkompilované do apache) a externé(nahrávajú sa podľa potrieb užívateľov). Aktiváciu modulov robíme direktívou AddModule. Externé moduly musíme najprv nahrať direktívou LoadModule.

Virtuálne servery

Apache umožnuje vytvoriť viacej virtuálnych serverov na jednom počítači, ktoré môžu prijímať požiadvky na viacerých ip adresách, alebo na jednej ip adrese a požiadavky sa rozdelujú podľa dns mena.

Jeden server prijíma požiadavky na viacerých ip adresách

<VirtualHost 10.0.0.80>
DocumentRoot /var/www1
...
<VirtualHost 10.0.80.1>
DocumentRoot /var/www2
...

Jeden server prijíma požiadavky na jednej ip adrese, ale na viaerých doménach

NameVirtualHost * <VirtualHost *>
DocumentRoot /var/www1
ServerName www.example1.com
...
<VirtualHost *>
DocumentRoot /var/www2
ServerName www.example2.com
...

Autentizácia

Apache ponúka viaceré formy autentizácie

Konfigurácia pre SSL authentifikáciu

<VirtualHost *:443>
        LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so #načteme modul
        SSLEngine On                                              #zapneme SSL engine
        SSLProtocol -all +SSLv3 +TLSv1                            #zvolíme typ protokolu
        SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW          #nastavíme parametry šifrování
        SSLVerifyClient none
        SSLCertificateFile /etc/apache2/ssl/apache2.pem           #zadáme cestu k certifikátu serveru
        ServerAdmin admin@example3.cz

        DocumentRoot /www/example3/

# Další parametry

</VirtualHost>

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

Apache ponúka dve metódy na sprístupnenie dokumentu vo viacerých jazykoch. Sú to variants file a multiviews(koncovky súborov).

Multiviews

Na využívanie multiviews musíme pre adresár s dokumentami nastaviť "options multiviews". Ďalej pomocou "AddLanguage" priradíme jednotlivým jazykom koncovky. Keď apache obdrží požiadavok z hlavičky požiadavku získa požadovaný jazyk a ako odpoveď pošle súbor s koncovkou daného jazyka.

<VirtualHost *>
    ServerName localhost
    DocumentRoot /var/www
    AddLanguage en .eng
    AddLanguage de .ger
    <Directory "/var/www">
        Options +MultiViews
        Order allow,deny
        Allow from all
    </Directory>
..

Literatura