HTTP(HyperText Transfer Protocol) je významnou součástí Internetu. Pracuje na principu klient/server. Mezi jeho nejrozšířenější klientské implementace patří Firefox, Mozilla a Internet explorer. Jeho serverovou implementací je např. Apache, IIS od Microsoftu nebo Roxen. V současné době je nejpoužívanější verzí HTTP 1.1 a HTTP 1.0.
Když webový klient realizuje spojení se serverem, implicitně kontaktuje TCP port serveru 80. Po tomto kontaktu se server nijak neprojevuje; je na klietovi, aby poslal svoje požadavky. Ty mohou být zaslány metodou GET a POST. Metoda GET slouží k získání dokumentu. Metoda POST např. pro zasílání vyplněného formuláře serveru(většinou vstup nějakému skriptu). Kromě těchto příkazů má protokol HTTP 1.1 definované ještě další typy komunikace.
Nejdříve klient sdělí serveru jakou metodou posílá data, jakou chce stránku a určí verzi protokolu. Pak následují hlavičky s požadavky a informacemi o klientovi. Jakmile klient nemá už co říct, pošle prázdný řádek. Server po přijetí prázdného řádku posílá požadovaný obsah, jemuž předchází záhlaví serveru. Záhlaví informuje klienta o serveru, o množství odeslaných dat a jejich typu.
HEAD - podobná metodě GET s tím rozdílem, že server vrací jen hlavičky dokumentu
DELETE - slouží k odstranění dokumentu na daném URL ze serveru
PUT - slouží k uložení dokumentu na dané URL
TRACE - zjišťování spojení
CONNECT - nastavení způsobu spojení
OPTIONS - zjišťování možností spojení
Apache je podobně jako Linux tvořen jádrem a moduly. Ty mohou být zkompilovány buď přímo do jádra(interní moduly) nebo se nahrají pří startu serveru(externí moduly). Zde se budu zabývat konfigurací verze Apache 2.2. Jeho kompletní manuálové stránky se nacházejí na http://httpd.apache.org/docs-2.2/.
Balíčky serveru Apache 2.2 najdete s největší pravděpodobností na distribučním disku, které je snadné naistalovat. Pokud se ovšem rozhodnete si Apache zkompilovat, provedete následující kroky:
U SuSe 10.1 spustíme server příkazem: /etc/init.d/httpd start
Jak bylo řečeno, Apache má mnoho modulů, které mohou být přidány. Externí moduly se nahrají pomocí direktiv LoadModule a LoadFile a poté se aktivují direktivou Addmodule.(to platí i pro interní moduly)
Podívejte se na kompletná seznam modulů pro Apache.
Konfigurační soubory jsou uloženy v adresáři /etc/apache2/(nebo /usr/local/etc, /etc/httpd/conf). Hlavní konfigurační soubor httpd.conf obsahuje nastavení základních vlastností serveru. V této verzi jsou do httpd.conf includovány soubory s nastavením. Je to pro větší přehlednost kódu.(bohatě komentováno)
Konfigurační soubor httpd.conf je rozdělen do tří částí: globální nastavení, implicitní nastavení a nastavení virtuálních serverů.
ServerType [standalone | initd]
Jakým způsobem bude server spuštěn. Buď jako démon (tedy samostatně), pak použijeme volbu standalone, nebo pomocí initd s volbou initd.
ServerRoot
Hlavní adresář s configuračními soubory.
PidFile
Soubor, kde je uloženo id procesu spuštěného serveru. Může být zadáno absolutně, ale i relativně (vzhledem k ServerRoot).
KeepAlive [on | off]
Tato funkce umožňuje vytvořit spojení přes které bude vyřízeno více požadavků od klienta. Pokud nepřijde od klienta další požadavek po dobu KeepAliveTimeout, je spojení uzavřeno.
MaxKeepAliveRequests
Maximální počet vyřízených požadavků přes KeepAlive spojení.
StartServers
Kolik se spustí démonů Apache při startu Apache.
MinSpareServers, MaxSpareServers
Minimální (maximální) počet volných (neobsazených) démonů.
MaxClients
Maximální počet současně běžících démonů(požadavků na server).
Listen [IP adresa:]port
Definuje na které adrese a kterém portu bude Apache poslouchat. Můžu zadat jen port nebo IP adresu s portem .
User, Group
Jméno uživatele a skupiny, pod kterými bude server běžet.
ServerAdmin
Emailová adresa správce serveru.
DocumentRoot
Jméno kořenového adresáře s dokumenty.(většinou obsahuje úvodní stránku serveru index.html)
Poměrně rozsáhlé nastavení poskytuje direktiva Direktory:
Slouží pro nastavení sdíleného adresáře. Tato direktiva se používá odlišně od předchozích, protože je uzavřena mezi < >. Mezi tagy jsou vloženy další direktivy vztahující se k zadanému adresáři. Mezi direktivy vkládané do Directory patří např. direktiva Options.
ExecCGI
Povoluje spouštění CGI skriptů v tomto adresáři.
FollowSymLinks
Povolí sledování symbolických linků v tomto adresáři.
Indexes
Pokud URL směřuje do adresáře kde není DirectoryIndex (tedy standartně index.html), pak se vypíše seznam souborů v tomto adresáři.
MultiViews
Povolení předávání dokumentů podle požadavků klienta
Order Allow, Deny
Allow from...nějaká doména
Deny from ...třeba all
Pokud bychom chtěli omezit přístup k dokumentům v daném adresáři uživatelům z určité domény.
AccessFileName
Tato direktiva definuje název souboru, ve kterém bude Apache hledat externí nastavení pro adresář, kde se soubor nachází. Většinou se nazývá .htaccess, ale můžeme nastavit název jiný nebo i více.
Podpora virtuálních serverů je jednou z nejpoužívanějších funkcí Apache. Virtuální servery slouží pro běh několika domén na jednom serveru. Tyto domény rozpoznáváme buď podle různých IP adres na jednom rozhraní nebo podle jmen domén na dané IP adrese.
SSL(Secure socket layer) šifruje TCP spojení mezi klientem a serverem. Využívá k tomu technik symetrické a asymetrické kryptografie.
Pro práci se SSL můžeme použít např. OpenSSL a do Apache přidáme modul mod_ssl.
Proteže autentizace probíhá na bázi asymetrické kryptografie, musíme poslat klientovi kromě sdíleného klíče i certifikát pravosti tohoto klíče. Pro náš účel budou stačit testovací certifikáty podepsané samy sebou. To provedeme příkazy
Soubor server.crt obsahuje veřejný certifikát a soubor server.key soukromý klíč.
Konfiguraci provádíme v httpd.conf. Použijeme tyto direktivy:
Protože jméno domény virt. serveru identifikujeme v hlavičce, kde už máme šifrování, nelze SSL použít s virt. servery.
CGI(Common gateway interface) slouží pro vytváření dynamických stránek. Jedná se o skripty, které od HTTP serveru přijmou vstup(proměnné prostředí, data zaslaná metodou POST) a vygenerují výstup, který se má poslat klientovi. Tento výstup obsahuje zase hlavičky a tělo dokumentu.
Abychom mohli spouštět skripty CGI potřebujeme upravit httpd.conf:
Ještě je nutné vybrat adresář ve kterém povolíme spouštění CGI skriptů.
Protože HTTP je protokol bezestavový, nemá server jak zjistit, zda klient je již autentizován či ne. Proto protokol HTTP nabízí Basic Authentication pro autentizaci klienta. Jedná se o jednoduchou autentizaci jménem a heslem. Výzva k autentizaci je z prostředkována pomocí hlavičky WWW-Authenticate: Basic realm="[jméno realmu]" a stavového kódu 401, kterou posílá server klientovi. Toto probíhá při každém spojení klienta na server.(klient jméno a heslo cachuje a dále se už uživatele neptá)
Pokud požadujeme autentizovaný přístup do nějakého adresáře, vytvoříme v něm soubor .htaccess a do něj vložíme následující kód:
Soubor se jmény uživatelů a jejich hesly vytvoříme pomocí příkazu htpasswd.
Klient může pomocí hlaviček protokolu říci serveru jaký jazyk čí znakovou sadu preferuje:
A server mu může dle možností vyhovět.
Zpřístupnění dokumentů ve více znakových sadách by se jistě dalo dělat pomocí MultiViews nebo typových map, ale to ovšem vyžaduje jeden dokument pro každou znakovou sadu.
IIS - od Microsoftu
Roxen - OpenSource šířený pod GPL http://www.roxen.com/products/webserver/
webový server jako součást jádra OS Linux. kHTTPD, boa