Hypertext transfer protokol je bezstavový aplikačný protokol definujúci spôsob komunikácie medzi HTTP klientom a HTTP serverom. Pôvodne bol určený na prenos HTML dokumentov, dnes sa ale využíva aj na inú dátovú komunikáciu.
ukážka komunikácie:
1. klient nadviaže spojenie zo serverom
2. klient požiada server o dokument metódou GET
3. server odpovedá zaslaním dokumentu
4. spojenie je ukončené serverom
Požiadavka klienta musí obsahovať metódu. Metódy určujú o čo ide pri danej požiadavke, napríklad metóda GET označuje požiadavku o zaslanie danej stránky. Metódy je možné rozdeliť medzi tzv. bezpečné a metódy majúce vedľajšie účinky.
GET, HEAD, OPTIONS, TRACE sú považované za bezpečné pretože žiadajú len o informácie zo servera a nijako nemenia jeho stav, zatiaľ čo metódy POST, PUT, DELETE majú tzv. vedľajšie účinky, ktoré server spracuje, napríklad metóda POST posiela nejaké dáta z formulára od klienta na server, ktorý ich spracuje.
- prvá verzia, dnes už nepoužívaná
- umožňuje požiadať o stránku iba metódou GET bez dodatočných informácií
- odpoveďou na požiadavku je priamo dokument bez dodatočných informácií
- po prenesení odpovede je spojenie ukončené serverom
- pridané metódy HEAD a POST
- voliteľné dalšie hlavičky v upravenom formáte MIME (napr. k požiadavke: Date, Authorization, From, If-Modified-Since, Referer, User-Agent; k tělu dotazu: Content-Encoding, Content-Length, k odpovedi: Date, Location, WWW-Authenticate; k tělu odpovědi: Content-Encoding, Content-Length)
- k odpovedi pridaná hlavička a informácie o stave odpovede - stavový kód
- pridaná podpora keep-alive - modelu perzistentného spojenia
- možnosť poslať viac požiadaviek cez jedno spojenie - pipelining
- podpora hlavičky upgrade (umožnuje upgrade spojenia na TLS a tým ho zabezpečiť)
Od verzie protokolu 1.0 boli zavedené kódy označujúce stav požiadavky.
Kategorie týchto kodov:
1xx - kody informačného charakteru (napr. 101 informujúci o zmene protokolu(101 - Switching protocols))
2xx - kody uspesnej poziadavky (napr. 200 OK - požiadavka úspešná)
3xx - kody presmerovania (napr. 301 - Moved Permanently - dokument už nieje na súčasnej adrese dostupný)
4xx - kody chyba klienta (napr. 404 - Not Found - dokument požadovaný klientom nenájdený)
5xx - kody chyba servera (napr. 500 - Internal Server Error - nečakaná chyba webservera)
Kompletný zoznam a popis kódov je možné nájsť TU.
Apache http server je v súčasnosti jeden z najrozšírenejších http serverov. Medzi jeho hlavné rysy patrí podpora modulov, možnosť behu tak ako v jednom tak i vo viacerých procesoch/vláknach, podpora kompresie HTML stránok prenášaných cez HTTP protokol. Od verzie 2.x podporuje IPv6.
Vo východzej inštalácii sú všetky dôležité konfiguračné voľby uložené v konfiguračnom súbore httpd.conf
. Aby sa konfigurácia sprehľadnila tak v závislosti na použitej distrubúcii sa môže rôzne voľby nachádzať v rôznych súboroch.
Nasledujúce rozloženie je typické pre Debian ale voľby sú spoločné pre všetky systémy.
./apache2.conf
ServerName www.mojserver.org
- názov serveru zapísaný domenovým menom alebo IP adresou
ServerAdmin root@mojserver.org
- mail na správcu servera (používa sa vo výpisoch v chybových stránkach)
LogLevel warn
- úroveň logovania
KeepAlive On | Off
- povoľuje/zakazuje perzistetné pripojenie
DocumentRoot /var/www
- koreňový adresár www servera
LoadModule module_name /module/path/mod.so
- načítanie modulu z daného umiestnenia
./ports.conf
Listen *:80
- adresa a port na ktorom ma server načúvať na požiadavky (* znamená na všetkých adresách daného stroja)
Include /etc/apache2/ports.conf
- umožňuje vkladať konfiguráciu z iného súboru (v tomto prípade ide o konfiguráciu portov na ktorých server načúva)
HostnameLookups On
- povoľuje serveru zistovať doménové mená klientov
DefaultType text/plain
- kódovanie aké sa má použiť ak server narazí na neznámy súbor
./mods_available/mime.conf
AddEncoding x-bzip2 .bz2
- umožňuje niektorým prehliadačom(tým čo to podporujú) zobrazovat obsah archívu už počas jeho prenosu (on-the-fly)
AddType application/x-bzip2 .bz2
- definuje typ súboru(mime type) s danou príponou, táto voľba hovorí serveru ako sa zachovať k daným príponám (napríklad ak ide o skript tak namiesto toho aby ho poslal klientovi tak ho vykoná)
./conf.d/charset
AddDefaultCharset UTF-8
- server bude predpokladať že súborz čo má sú kódované v UTF-8
./sites-enabled/
<VirtualHost *:80>
- nasluchajúci na všetkých adresách na porte 80
ServerAdmin webmaster@localhost
- majúci súbory umiestnené vo /var/www
DocumentRoot /var/www/
<Directory />
- poradie v akom sa budú vyhodnocovať prístupové pravidlá
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
- s povoleným skriptovaním CGI
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
- úroveň logovania
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Ide o možnosť mať viacero http serverov na jednom stroji. Každý tento server musí mať buď vlastnú adresu(IP-based) alebo vlastné doménové meno(Name-based).
Takýto server môže mať vlastné umiestnenie www súborov ,log súborov, chybových stránok ... Táto technika sa využíva pri webhostingu.
Keďže protokol HTTP nie je šifrovaný tak sa používa SSL na jeho zabezpečenie.
Pre zapnutie podpory SSL je potrebné do konfigurácie daneho servera(môže byť i virtuálny ale nemôže byť Name-based) zaviest dodatočné voľby:
SSLEngine On
SSLCertificateFile verejny_certifikat_serveru.pem
SSLCertificateKeyFile sukromny_kluc_serveru.crt
Common Gateway Interface (CGI) je technológia podporujúca používanie skriptov na generovanie HTML stránok na strane servera. Jej použitie je potrebné povoliť v konfigurácii.
Napriek tomu že Apache je asi najpoužívanejším HTTP serverom existujú aj iné HTTP servery, ktoré sa zameriavajú na nedostatky apache alebo na nasadenie v špecifických podmienkach. Napríklad projekt Lighttpd sa zameriava na čo najväčšiu priepustnosť servera(hlavne statických stránok) a nízku pamäťovú náročnosť. Tomcat sa zameriava na rýchle vykonávanie JSP.