HTTP je bezstavový protokol založený na textové reperzentaci, jako oddlovače používá konce řádků. HTTP/1.1 je definovaný v RFC 2616. Standardně se používá na portu 80.
Ukázka komunikace
požadavek:
GET /wiki/Wikipedie HTTP/1.1 Host: cs.wikipedia.org User-Agent: Mozilla/5.0 Gecko/20040803 Firefox/0.9.3 Accept-Charset: UTF-8,*
odpoveď:
HTTP/1.0 200 OK Date: Fri, 15 Oct 2004 08:20:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.8 X-Powered-By: PHP/4.3.8 Vary: Accept-Encoding,Cookie Cache-Control: private, s-maxage=0, max-age=0, must-revalidate Content-Language: cs Content-Type: text/html; charset=utf-8
Řád stovek http odpovědi určuje, zda byl dotaz úspěšný, či nikoli. Seznam možných HTTP požadavků je:
HTTP definuje několik metod, které se mají provést nad uvedým objektem (dokumentem). <metoda> <objekt> HTTP/<verze>GET | Požadavek na uvedený objekt. Je to nejpoužívanější metoda. Je používána když se podíváte ráno na zprávodajský i-magazín, přes den stahujete RSS a nebo stahujete novou verzi webového prohlžeče z webu. |
HEAD | To samé jako metoda GET, ale už nepředává data. Poskytne pouze metadata o požadovaném cíli (velikost, typ, datum změny, ...). |
POST | Odesílá uživatelská data na server. Používá se například při odesílání formuláře na webu. S předaným objektem se pak zachází podobně jako při metodě GET. |
PUT | Nahraje data na server. Objekt je jméno vytvářeného souboru. Používá se velmi zřídka, pro nahrávání dat na server se běžně používá FTP nebo SCP/SSH. |
DELETE | Smaže uvedený objekt ze serveru. Jsou na to potřeba jistá oprávnění stejně jako u metody PUT. |
TRACE | Odešle kopii obdrženého požadavku zpět odesílateli, takže klient může zjistit, co na požadavku mění nebo přidávají servery, kterými požadavek prochází. |
OPTIONS | Dotaz na server, jaké podporuje metody. |
CONNECT | Spojí se s uvedeným objektem před uvedený port. Používá se při průchodu skrze proxy pro ustanovení kanálu SSL. |
1xx - Informační 2xx - Úspěch 3xx - Přesměrování 4xx - Chyba na straně klienta 5xx - Chyba na straně serveruProtokol http se krom WWW používá pro e-mail či webové služby.
Slouží k obsluze komunikace přes protokol http. Rozšířenost webových serverů monitoruje například společnost Netcraft (www.netcraft.com).
Jako ukázkový server jsem vybral http server Apache pro množství dokumentace, množství případových studií, ověřenost, rozšiřovatelnost, licenci, zkušenosti s provozem, množství dostupných modulů a jiných navazujících komponent, stabilitu, konfigurovatelnost, podporu virtuální serverů a mj. i cenu.
Jméno webového serveru pochází od názvu Apache Software Foundation, která se zabývá podporou, vývojem a spoluprací na softwarových projektech. ASF pro své produkty používá licenci Apache Licence, nyní 2.0. Licence je kompatibilní s GPL v 3. Celkově není žádný problém používat http server Apache pro ziskové, neziskové, či jakékoli jiné účely, ve všech případech zadarmo. Aktuální stabilní verze serveru je 2.2.6 (7.9.2007)
Server můžete získat jako balíček (pravděpodobně ve většině distribucí), nebo zkompilovat ze zdrojových kódů z http://httpd.apache.org.
Server je ovládán pomocí /bin/apache2ctl start | stop | status
a další
Konfigurace serveru je v podstatě jediný soubor s polovičatou XML syntaxí. Různé soubory mohou být pomocí direktivy Include file včleněny do konfigurace. Lze tedy vše napsat na jedno místo, může to pak být nepřehledné, ale lze v tom vyhledávat. Seznam direktiv je zde: http://httpd.apache.org/docs/2.2/mod/directives.html
DocumentRoot | kořen adresářového stromu, ve kterém Apache hledá dokumenty |
Listen | [IP adresa:]port - server poslouchá jen na zvoleném rozhraní (defaultně poslouchá na všech rozhraních a portu definovaném pomocí |
Port | KeepAlive on nebo off - umožňuje využít vlastností HTTP/1.1 a neuzavřít spojení s klientem hned po odeslání odpovědi |
User | jméno uživatele, pod kterým má server běžet (měl by jej tedy spouštět superuživatel), obdobně |
AccessFileName | jméno souboru, který při patřičném nastavení definuje parametry pro přístup a práci s adresářem ve kterém se vyskytuje.Defaultně se používá .htaccess |
AllowOverride | která nastavení mohou být nakonfigurována v .htaccess |
DocumentRoot "/srv/www/htdocs" <Directory "/srv/www/htdocs"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
Moduly rozšiřují funčnost základního modulu core. V serveru se mohou vyskytovat jako moduly zakompilované, nebo přidane. Podle zdrojů je praktičtější moduly nekompilovat. Modul se přidá direktivou LoadModule jk_module modules/jk_mod.so
(modul jk_mod), oznameni modulu zakompilovaneho pak direktivou ModuleAdd
Virtuální servery vznikly jako reakce na nutnost mít pro každou internetovou doménu samostatný fyzický stroj. Existují různé způsoby, jak na jednom stroji provozovat více serverů.
nejedná se úplně tak o virtuální servery, nicméně je jim potřeba vysvětlit pomocí direktivy Listen na které IP adrese a portu mají poslouchat a odpovídat. Dále je jim potřeba předat informaci o různých umístěních konfiguračních souborů pomocí prefixu. Tato varianta se objevuje jako samostatné servery instalované do virtuálních strojů.
<VirtualHost 192.168.1.50> ServerAdmin webmaster@kuba1.test DocumentRoot /var/www/kuba1.test ServerName kuba-1.test ErrorLog logs/kuba1.test-error_log TransferLog logs/kuba1.test-access_log </VirtualHost> <VirtualHost 192.168.1.51> ServerAdmin webmaster@kuba2.test DocumentRoot /var/www/kuba2.test ServerName kuba-2.test ErrorLog logs/kuba2.test-error_log TransferLog logs/kuba2.test-access_log </VirtualHost>
V tomto případě se takto nastavují pouze dodatečné servery, existuje jeden hlavní (uvedený v DocumentRoot)
Více IP adres nastavíme pomocí ifconfig jako aliasy(např eth0:0, eth0:1,
). Trvalé aliasy lze zřídit pomocí (distribučně závislých) skripů. RH - /etc/sysconfig/network-scripts
, SuSE - /etc/rc.config
, Debian - /etc/network/interfaces
výhoda tohoto řešení spočívá v lepším přístupu k jednotlivým doménám (změny IP adres, stěhování serveru,...) a také v tom, že lze použít SSL (které pracuje podle IP adres).
Toto nastavení server odpovídá na požadavky podle toho jaký zdroj (soubor) byl požadován. Soboury z domény např. kuba1.test pak bere z jednoho adresáře, soubory z domény kuba2.test z druhé. Tato varianta má výhodu v tom, že nepotřebujete více IP adres, stačí nastavit DNS na danou adresu, nevýhodu v tom, že nelze spojit se SSL (kteražto pracuje pod vrstvou HTTP) nastavení pak vypadá takto:
<VirtualHost *> ServerAdmin webmaster@kuba1.test DocumentRoot /var/www/kuba1.test ServerName kuba1.test ErrorLog logs/kuba1.test-error_log TransferLog logs/kuba1.test-access_log </VirtualHost> <VirtualHost *> ServerAdmin webmaster@kuba2.test DocumentRoot /var/www/kuba2.test ServerName kuba2.test ErrorLog logs/kuba2.test-error_log TransferLog logs/kuba2.test-access_log </VirtualHost>
Takto nastavené musí všechny domény.
AuthType Basic AuthName "Název realmu" AuthUserFile /var/www-auth.file Require valid-user
SSL Secure Socket Layer vrstva mezi TCP a http. Zajistuje autentizaci na nižší vrstvě, proud dat šifruje. Využívá se pro zabezpečení spojení jako takového, nad tímto spojením může ještě existovat Basic autentizace, nebo Digest. SSL používá asymetrické šifrování SST nověji TSL Transport Socket Layer lze nastavit pomocí balíku openSSL, apache pomocí modulu mod_ssl. Program z balíku můžeme použít na vygenerování hesla.
LAMP je zkratka pro Linux, Apache, MySQL, Perl/PHP/Python. Jedná se o oblíbenou sadu nástrojů, na kterých běží velká škála aplikací. MySQL lze využít jako databázový stroj pro aplikaci běžící na serveru, ale také na autentizaci uživatelů pomocí modulu. Perl/PHP/Python jsou více či méně rozšířené / oblíbené / skriptovací jazyky, které umožňují generovat aktivní obsah Vše se konfiguruje pomocí modulů. (mod_python, mod_php, ...)
Jedná se o servletový kontejner, umožnující vstup/výstup programů v Javě a řízení jejich běhu. Umí fungovat jako samostatný server, ale nepoužívá se to pro výkonové důvody u statických souborů (obrázky, statické stránky). Tomcat je opět od Apache Software Foundation Alternativy: Jetty, WebSphere, ...
Pro nastavení Tomcata pro spolupráci s Apachem je potřeba udělat dvě věci - na straně apache zprovoznit nějaké propojení - mod_jk, nebo mod_proxy_ajp, který je novější. (AJP je Apache JServe Protocol.). Na straně Tomcata je poteba definovat Listener v souboru server.xml.
Proč použít Tomcat a Javu na serveru? JSP - Java Scripting Pages - stránky vypadají jako PHP, ale jsou kompilované.