Unix a Internet 6. Webový server © Milan Keršlágerhttp:// Obsah: ● WWW, webový server, URI (URL+URN) ● HTTP, virtuální servery ● dynamické stránky, skriptování, CGI ● HTTPS, SNI, reverzní proxy
WWW server ● Tim Berners-Lee (1989) ● laboratoře CERN – návrh hypertextového systému ● 1990 – první klient a server ● klient WorldWideWeb, později nazván Nexus – zobrazuje stránky – používá tehdy nový HTTP protokol ● serverová část – CERN httpd – odešle na požadavek klientovi data ● nejprve se lavinovitě rozšířil Gopher ● od roku 1995 již WWW
WWW ● World Wide Web ● dnes označení pro službu – původně název prvního webového prohlížeče Nexus ● „celosvětová pavučina“ ● používá model klient-server – klient – používán uživatelem – server – dodává klientovi vyžádaná data – komunikace protokolem HTTP – dokumenty identifikovány pomocí URI
URI ● Uniform Resource Identifier ● jednoznačná identifikace dokumentu v Internetu ● skládá se z URL a URN ● URL (Uniform Resource Locator) – schéma a doménové jméno: – – ● URN (Uniform Resource Name) – cesta a další parametry: – /over/there/index.dtb?type=animal;name=narwhal#nose
HTTP ● Hypertext Transfer Protocol ● verze 0.9 (původní), 1.0 a 1.1 (aktuální RFC 2616) GET / Host: ● za GET je URN – cesta k souboru, název, parametry – vždy alespoň lomítko (hlavní stránka) – ukončení prázdným řádkem ● odpověď hlavička a vlastní data – pro popis obsahu dat využívá MIME
Metody HTTP ● způsoby získání odpovědi ● GET – běžné získání stránky, součástí jen hlavička – parametry součástí URN (omezení max. délkou) ● POST – součástí dotazu je i tělo, ve kterém mohou být data – data označena MIME typem (jako odpovědi) ● HEAD – jako GET, ale není odesláno tělo ● PUT, DELETE, TRACE – typicky nepodporováno
Nejnutnější komunikace GET / Host: HTTP/ OK Content-Type: text/html Obsah HTML stránky Dotaz klienta Odpověď serveru: 1) hlavička 2) tělo dokumentu Poznámka: horizontálním oddělovačem je prázdný řádek (Enter bez znaku)
Hlavička odpovědi ● každá položka má vlastní řádek ● některé definované položky ● HTTP/ OK ● Content-Type ● Date ● Server ● Cache-Control ● uživatelské položky ● začínají na X-
Aliasy ● vlastnost webového serveru ● normálně URN odpovídá adresářům u serveru ● alias umožňuje mapovat URN na odlišná umístění ● skrývá interní adresářovou strukturu u serveru ● výhodné pro „hezká“ URN – SEO optimalizace – orientace uživatele (kategorie zboží) ● umožňuje udělat z URN parametr – vyvolání zdání, že obsah jsou statické stránky – omezuje riziko manipulace s parametry URN
Přesměrování ● server přenese klienta na jiné URI ● v hlavičce je klientovi předáno nové URI ● HTTP/ Moved Permanently ● Location: ● klient přepíše sám sobě adresu v adresním řádku – „automatické přenesení na novou adresu“ ● různé důvody: – změna adresy, změna URN struktury atd. – též kódy 300, 302, 303, 307
Virtuální servery ● více webových serverů na 1 IP adrese ● potíž v tom, že v GET, POST je jen URN ● klient přeloží jméno na IP adresu – a webový server netuší, z jakého to bylo jména ● řeší HTTP 1.0 → má v požadavku položku Host: – webový server se tak dozví URL (doménové jméno) – dnes jsou virtuální servery běžné – proto nelze používat HTTP 0.9 ● každý virtuál má svoje vlastní nastavení – jiný kořenový adresář, logy, aliasy atd.
Statické stránky ● nejjednodušší obsah webového serveru ● stránka je na disku v souboru ● server stránku beze změny pošle klientovi ● snadné dosažení vysokého výkonu – omezením pouze rychlostí sítě a souborového systému ● pro snížení režie je podpora v jádře OS – sendfile() – webserver jako jaderný modul (TUX web server) ● vynechání kopírování dat z page cache do userspace ● nebezpečné → lighttpd
Dynamické stránky ● stránka generována podle požadavku klienta ● podle aktuálního obsahu databáze – titulní stránka internetových novin ● podle zadání klienta – požadavek předán jako URN, parametr v GET či POST ● server musí spustit nějaký program – předání parametrů programu skrze CGI rozhraní – výstup programu odeslán klientovi – dříve samostatné programy – dnes skriptovací jazyky
Webový formulář ● vytvářen prvky HTML jazyka ● prohlížeč zobrazí vstupní pole a tlačítko ● odeslání pomocí Enter nebo kliku na tlačítko – na serveru vyvolána stránka dle URL – vstup z formuláře předán metodou GET serveru ● nestavová záležitost
CGI ● Common Gateway Interface ● předání dat od klienta k programu u serveru – typicky z webového formuláře – pomocí proměnných prostředí (metoda GET) – jako standardní vstup (POST, PUT) ● program generuje výstup – výstup je webová stránka odeslaná klientovi ● problém vzniku nového programu – snadné přetížené webového serveru – FastCGI → program běží trvale
Skriptování na serveru ● využití skriptovacího jazyka ● výpočet se odehraje na straně serveru ● nevyžaduje kompilaci do binární podoby ● interpret však zdržuje (prodleva při startu) ● pohodlné pro vývojáře – většinu bezpečnostních děr způsobí vývojáři – typicky nedostatečná kontrola vstupů ● oblíbené vkládání skriptu do HTML stránky – PHP → multiplatformní – ASP → Microsoft Windows
PHP ● PHP: Hypertext Preprocesor ● skriptovací jazyk pro webové stránky (1995) ● interpret dostupný jako: – externí program (podobně jako Perl, Python, bash, …) – modul do serveru ● syntaxe převzata z Perlu (podobné C, JavaScriptu) PHP Test <?php echo 'Hello World'; ?>
Skriptování u klienta ● program uvnitř prohlížeče ● kód přepraven do klienta ze serveru ● kód je součástí webové stránky ● JavaScript – standardní součást webových prohlížečů – AJAX → implementace asynchronní komunikace ● Java, Flash, Silveright, … ● často bezpečnostní komplikace
HTTPS ● zabezpečené HTTP ● vřazena mezivrstva – SSL 1.0, 2.0, 3.0 ● starší verze nepovažovány za bezpečné – TLS 1.0, 1.1, 1.2 ● TLS je zpětně nekompatibilní nástupce SSL ● využití elektronického podpisu – protistrana může prokázat svoji identitu – obvykle ji prokazuje server, ale může i klient – přenos důvěry od certifikační autority na protistranu
SNI ● Server Name Indication ● problém virtuálních serverů a HTTPS ● server se prokazuje certifikátem – šifrování zahájeno ihned po navázání spojení – certifikát obsahuje jméno serveru ( – název serveru je však sdělen serveru později ● položka Host: v protokolu HTTP/1.0 ● SNI umožňuje sdělit jméno serveru dříve – tj. ještě před výměnou certifikátů – podpora ve všech prohlížečů, nyní i pro servery ● SNI je rozšíření TLS protokolu
Apache ● nejrozšířenější webový server (viz Netcraft) ● původně 1993 v NCSA (Illinoiská univerzita) – největším konkurentem je MS IIS ● Microsoft Internet Information Server ● ve znaku ptačí pero (indiánský symbol) – další význam „a patchy server“ (záplatovaný server) ● open source software ( Apache Software Foundation ) – vlastní OSS licence (Apache License 2.0) ● modulární struktura – mod_ssl, mod_php, mod_python, …
Reverzní proxy ● cache na straně serveru (mod_proxy, Squid,...) ● drží často poptávané stránky v paměti ● důležité pro dynamický obsah – reálně se generuje jen občas ● problémy s aktuálností – řešeny lépe, než cache v prohlížeči – webový server i rev. cache spravuje jeden správce ● i jiná využití – skrytí skutečného webového serveru – rozložení zátěže mezi více webových serverů – přidání SSL (seznam.cz), komprese obsahu apod.