WWW, HTTP servery

Jakub Samuel Paulovič, 422425@mail.muni.cz

Obsah

Protokol HTTP

HTTP (HyperText Transfer Protocol) je sieťový protokol fungujúci na aplikačnej vrstve ISO/OSI modelu. Je základným stavebným kameňom webu (WWW) ako ho poznáme.
Základnou charakteristikou tohto protokolu je bezstavovosť a využívanie modelu klient-server. Klient teda odosiela požiadavky, na ktoré server odpovedá.
Typ vykonanej akcie na strane servera je zvolený na základe prijatej požiadavky (metódy). Typy metód HTTP požiadaviek:

Server po prijatí požiadavky a vykonaní akcie odošle klientovi odpoveď v podobe návratového kódu:
200 - OK, 301 - Moved Permanently, 403 - Forbidden, 404 - Not Found, 500 - Internal Server Error, ...

Apache HTTP Server Project

Najpoužívanejším webovým serverom s otvoreným zdrojovým kódom (Apache License) v súčasnosti je práve Apache, aktuálne vo verzii 2.4.23.
Vyznačuje sa robustnosťou, bezpečnosťou a širokými možnosťami rozšírenia pomocou modulov.

Konfigurácia

Hlavným konfiguračným súborom Apache servera je httpd.conf. V ňom je možné nastaviť základnú konfiguráciu webového servera, ako napr. rozhrania a porty na ktorých má server počúvať (Listen), domovský adresár pre poskytovaný obsah (DocumentRoot) vrátane úpravy prístupových práv k jednotlivým častiam uloženého obsahu a pod. Tento súbor tiež obsahuje direktívy pre zahrnutie ďalších konfiguračných súborov, uložených zväčša v zložkách conf.d a conf.modules.d.
conf.d obsahuje ďalšie konfiguračné súbory pre rozšírené možnosti nastavenia správania servera, ako napr. možnosť povolenia používateľských verejných zložiek v ich domovských adresároch, či nastavenie predvoleného zobrazovaného dokumentu v prípade absencie stránky index.*
Zložka conf.modules.d. obsahuje súbory so zoznamom modulov, ktoré majú byť načítané.

Moduly

Ako bolo spomenuté vyššie, Apache HTTP Server sa vyznačuje svojou modularitou vďaka podpore modulov rozširujúcich jeho funkcionalitu.
Niektoré moduly sú štandardne dostupné priamo v základnej inštalácii, ďalšie sa dajú jednoducho doinštalovať.
Príkladom môže byť modul mod_ssl poskytujúci podporu SSL/TLS, mod_http2 pridávajúci podporu štandardu HTTP/2, či mod_cgi pridávajúci podporu CGI skriptov.

Virtuálne servery

Virtuálne servery (virtual hosts) predstavujú spôsob, ako na jednom fyzickom serveri prevádzkovať viacero webových sídiel.
Tie sú rozlišované buď na základe IP adresy, alebo domény. Takto je možné priradiť rôznym doménam rôzny obsah na tom istom serveri.
Príklad name-based: https://httpd.apache.org/docs/2.4/vhosts/name-based.html Príklad IP-based: https://httpd.apache.org/docs/2.4/vhosts/ip-based.html

CGI skripty

Common Gateway Interface slúži na dynamické generovanie obsahu webových stránok pomocou skriptov spúšťaných na strane servera.
Pri navigácii na zdroj tohto typu server namiesto statického odoslania daného dokumentu klientovi takýto súbor spustí a klientovi odošle vygenerovaný výstup.
CGI skripty sú identifikované buď podľa ich umiestnenia v ceste definovanej pomocou premennej ScriptAlias, prípadne podľa ich prípony v mene súboru. V tomto prípade zodpovedajúce nastavenie nájdeme pod položkou AddHandler.

Alternatívne HTTP servery

Apache HTTP Server je síce najpoužívanejším, avšak nie jediným HTTP serverom používaným na platformách *NIX.
Príklady ďalších používaných HTTP serverov na tejto platforme:

Autentizácia

Basic Authentication

Predstavuje najjednoduchší spôsob autentifikácie pomocou mena a hesla za použitia štandardných HTTP hlavičiek (pole Authorization v HTTP požiadavke).
Tento spôsob neposkytuje žiadnu formu ochrany takto prenášaných údajov, keďže zadané autentifikačné údaje sú pred odoslaním iba zakódované pomocou Base64.
Webový prehliadač si po prijatí autentifikačných údajov touto formou uloží na nejakú dobu do cache, čím sa zabráni vyžadovaniu týchto údajov pri každej požiadavke od klienta.
Tým tiež vzniká problém odhlásenia používateľa pred vypršaním tejto doby. Jedným z riešení je odosielať návratový kód 401 - Unauthorized po kliknutí na tlačidlo určené na odhlásenie.

Cookies

Pri použití súborov cookies je možné lepšie spravovať autentizovanú reláciu servera s klientom. Po prijatí požiadavky od klienta na prihlásenie je mu v odpovedi zaslaná cookie, ktorá sa uloží na serveri asociovaná z daným používateľom a zároveň sa odošle v odpovedi na takúto požiadavku a tým sa uloží u klienta. Pri následujúcich požiadavkách klient spolu s požiadavkou odošle uloženú autentifikačnú cookie, ktorú server porovná s cookie uloženou v databáze a pri zhode povolí klientovi prístup. Pre odhlásenie tak stačí vymazať príslušnú cookie.

Range requests

Range requests predstavujú typ požiadavky pre získanie určitej časti zdroja. Pri odosielaní požiadavky sa špecifikuje časť zdroja, ktorá má byť klientovi poskytnutá. Príklad:

 HTTP/1.1 206 Partial Content
 Date: Wed, 15 Nov 1995 06:25:24 GMT
 Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
 Content-Range: bytes 21010-47021/47022
 Content-Length: 26012
 Content-Type: image/gif

HTTP proxy cache

Proxy cache servery slúžia na rýchle poskytovanie klientmi často vyžadovaného obsahu. Pri prvej požiadavke od klienta je vyžadovaný dokument takýmto serverom stiahnutý z pôvodného zdroja, posunutý klientovi ako odpoveď a zároveň uložený do vyrovnávacej pamäte. Pri ďalších požiadavkách od klientov im je okamžite poskytnutý obsah bez nutnosti kontaktovať originálny zdroj (server) a to až do vypršania platnosti daného dokumentu. Vtedy je nutné obsah znovu stiahnuť z originálneho zdroja. Platnosť obsahu je daná buď priamo HTTP hlavičkou Expires, príp. max-age, alebo je vypočítaná na základe dát z hlavičiek last_modified a date ako ( date - last_modified ) * <konštanta>
Z dôvodu takéhoto "medzičlena" medzi klientom a dotazovaným serverom nie je možné týmto spôsobom cache-ovať požiadavky využívajúce šifrovanú komunikáciu SSL/TLS.
Obsah šifrovanej komunikácie pri správnej implementácii totiž z princípu nevie zistiť nikto okrem odosielateľa a určeného koncového príjemcu takejto komunikácie.
Medzi najznámejšie proxy caching servery patrí Squid, používaný aj na FI MUNI [1], či Apache Traffic Server.

Literatúra