WWW, HTTP servery

Radoslav Zajonc, 324532@mail.muni.cz

Obsah


Protokol HTTP

HTTP (skratka Hypertext transfer protocol) je primárna metóda prepravy informácií na world wide webe. Pôvodný účel bol poskytovať prostriedky pre publikáciu a získavanie HTML stránok.

Vývoj HTTP koordinovalo World Wide Web Consortium (W3C) a pracovné skupiny Internet Engineering Task Force (IETF). HTTP je protokol definujúci požiadavky a odpovede medzi klientmi a servermi. HTTP klient (označovaný ako user agent), ako webový prehliadač zvyčajne začne požiadavku nadviazaním TCP spojenia na určenom porte vzdialeného stroja (štandardne port 80). HTTP server počúvajúci na danom porte čaká a plní žiadosti klienta. [1]

Druhy žiadostí

GET najbežnejší typ žiadosti, ktorý žiada o zdroj na uvedenej URL adrese
POST tiež žiada o zdroj, ale v tele správy sa vyskytujú dvojice (kľúč a hodnota) z HTML formulára
PUT na danú URI sa na server uploaduje súbor
DELETE opak PUT, ale nie moc používané
HEAD tiež žiada o zdroj, ale nepožaduje telo správy, iba hlavičky, metainformácie o dokumente
TRACE zašle naspäť odosielateľovi kópiu obdržanej požiadavky, takže klient môže zistiť, ako sa požiadavka zmenila po prechode cez servery
OPTIONS vráti serverom podporujúce metódy HTTP, takto môžeme testovať funkcionalitu
CONNECT nie je moc používané, slúži na spojenie sa s objektom cez uvedený port, používa sa pri prechode proxy na vytvorenie SSL tunelu

Po ukončení žiadosti sa spojenie so serverom ukončí, čo je na jednej strane ideálne pre odkazovanie na iné stránky cez mnoho serverov. No na druhej strane to nevyhovuje tvorcom webu, pretože to nezabezpečí uchovanie stavu používateľa. Problém čiastočne riešia cookies.

Stavové kódy

Je to stav spracovania žiadosti serverom. Jedná sa o 3 miestny číselný kód, kde prvá cifra určuje druh stavu:
1xx informačné
2xx vyjadrujúce úspech
3xx presmerovania
4xx chyba na strane klienta
5xx chyba na strane serveru


Protokol HTTPS

Hypertext Transfer Protocol Secure je zabezpečená verzia HTTP, komunikačného protokolu World Wide Web. Bol vyvinutý firmou Netscape Communications Corporation pre poskytovanie overenia a šifrovanej komunikácie. Namiesto používania jednoduchej textovej komunikácie, HTTPS šifruje prenos dát použitím SSL (Secure Socket Layer) protokolu alebo TLS (Transport Layer Security) protokolu a tým zaisťuje primeranú ochranu pred odpočúvaním komunikácie a pred útokom ,,Man in the middle". Pre HTTPS komunikáciu sa štandardne používa TCP/IP port 443. [2]

Bezpečnosť HTTPS je závislá na certifikátoch (prípadne ešte aj overených certifikačnou autoritou). Bez podpísaného certifikátu je tento protokol zraniteľný. V praxi sú však často používané nepodpísané certifikáty, čím sa stráca bezpečnosť, ktorú HTTPS ponúka.


Apache

je dnes najrozšírenejší HTTP server.

História

Pôvodný projekt s označením NCSA HTTPd bol vytvorený Robertom McCoolom a vznikol v roku 1993 na Illinoiskej univerzite v NCSA. Po roku došlo k zastaveniu vývoja. Skupina programátorov vydávajúca záplaty, dnešná zastrešujúca organizácia The Apache Software Foundation a taktiež aj rast obľúbenosti zapríčinili jeho vzrast. U verzii 2.0 došlo k značnému prepísaniu zdrojového kódu, modularizácie, lepšia podpora pre neUNIXové platformy nová API a podpora IPv6. Dnes používaná stabilná verzia je 2.2, ktorá má pružnejšiu autorizáciu API a je vybavená cache a proxy modulmi.

Inštalácia a konfigurácia na Debian

Inštalácia je jednoduchá, stačí nainštalovať balíček apache2. Konfigurácia sa prevádza pomocou súboru /etc/apache2/apache2.conf a ďalších súborov, ktoré sú pre prehľadnosť oddelené a doň inkludované. Moduly sa zavádzajú vytvorením symbolického linku z /etc/apache2/mods-available do /etc/apache2/mods-enabled. Pre beh apachu postačí napísať /etc/init.d/apache2 {start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}.

Virtuálne servery

Apache server môže v rámci jedného stroja prevádzkovať viacero nezávislých serverov. Toto sa používa hlavne pri webhostingu. Každý virtuálny stroj môže mať svoj konfiguračný súbor, datový priestor nastavenia alebo logy. Virtuálne stroje od seba odlišujeme buď IP adresou alebo doménou.

Príklad odlíšenia virtuálnych mašín doménou:

NameVirtualHost *:80

<VirtualHost *:80>
	ServerName www.domain.tld
	ServerAlias domain.tld *.domain.tld
	DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
	ServerName www.otherdomain.tld
	DocumentRoot /www/otherdomain
</VirtualHost>

Príklad IP virtuálnej mašiny:

NameVirtualHost 111.22.33.44

<VirtualHost 111.22.33.44>
	ServerName www.domain.tld
	ServerPath /domain
	DocumentRoot /web/domain
</VirtualHost>
[3]

Konfigurácia .htaccess

Prepisovacie pravidlá definované pre adresár. Názov súboru je štandartne .htaccess, definovaný v /etc/apache2/apache2.conf riadok AccessFileName .htaccess. Vypnutie je možné: AllowOverride None.

Príklad použitia:

RewriteEngine on 
RewriteRule !^(documents|photos|pictures|src|upload)/.*$ - [C] 
RewriteRule ^([^/]*)/([^/]+).*$ src/index.php?dir=$1&file=$2&%{QUERY_STRING} 
RewriteRule ^([^/]*)/*$ src/index.php?dir=$1&file=$1&%{QUERY_STRING} [L]

SSL

zabezpečuje komunikáciu šifrovaním a autentizáciou komunikujúcich strán. Pre použitie SSL treba zaviesť modul mod_ssl. SSL certifikáty sú vydávané na meno domény.

Príklad použitia:

<VirtualHost _default_:443>
	SSLEngine on
	SSLCertificateFile    /etc/pki/tls/certs/localhost.cert
	SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>
[4]

CGI

Common Gateway Interface (v skratke CGI) je tiež protokol pre prepojenie externých aplikacií s webovým serverom. Pre použitie CGI treba zaviesť modul mod_cgi. CGI skripty je možné umiestniť samostatne pomocou: ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/", alebo povoliť spustenie skriptu pomocou prípony:

<Directory /home/*/public_html>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex index.html index.cgi
</Directory>
[5]


Literatura