BI-AWD Administrace Webového a Databázového serveru Virtualizace HTTP serveru Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti 1
HTTP virtualizace Virtual hosting (VH) je technika umožňující na jednom serveru (např. webserveru) hostit více domén IP-based virtual hosting Pro každou hostovanou doménu je vyhrazena jedna nesdílená IP adresa. Lze použít s HTTP/1.0 i HTTP/1.1 Name-based virtual hosting Na jedné IP adrese je provozováno více domén Používané protokoly pak musejí implementovat mechanismus umožňující rozlišení domén Lze použít pouze s HTTP/1.1 Obě techniky lze kombinovat 2
HTTP určení hostitele HTTP 1.1 1.pokud server dostane absolutní URI, musí hlavičku Host ignorovat a použít název hostitele z URI 2.pokud dostane relativní URI a požadavek obsahuje hlavičku Host, použije název hostitele z hlavičky 3. jinak odpovídá: 400 Bad Request HTTP 1.0 1.pokud požadavek neobsahuje hlavičku Host, může se pokusit určit hostitele jinak Při směřování požadavku na proxy, je nutné zadávat absolutní URI Absolutní cesta v URI nesmí být prázdná, musí být alespoň / 3
HTTP určení hostitele I :: LAB Odeslání požadavku telnet www.google.com 80 Trying 74.125.39.105... Connected to www.l.google.com. GET / HTTP/1.1 Host: www.google.cz Trying 74.125.39.105... Connected to www.l.google.com. GET http://www.google.cz/ HTTP/1.0 Trying 74.125.39.105... Connected to www.l.google.com. GET / HTTP/1.1 Host: www.google.cz Connection: Close 4
HTTP určení hostitele II :: LAB Odeslání požadavku telnet www.seznam.cz 80 Trying 77.75.76.3... Connected to www.seznam.cz. GET / HTTP/1.1 Trying 77.75.72.3... Connected to www.seznam.cz. GET http://www.google.cz/ HTTP/1.1 Host: www.google.cz 5
HTTP další informace v hlavičce I :: LAB telnet www.wikipedia.org 80 Trying 91.198.174.225... Connected to wikipedia-lb.esams.wikimedia.org. GET / HTTP/1.0 HTTP/1.0 403 Forbidden Date: Tue, 25 Oct 2011 12:23:39 GMT Server: Apache X-Content-Type-Options: nosniff Cache-Control: no-cache Vary: Accept-Encoding Content-Length: 120 Content-Type: text/html; charset=utf-8 X-Cache: MISS from sq37.wikimedia.org X-Cache-Lookup: MISS from sq37.wikimedia.org:3128 Connection: close Scripts should use an informative User-Agent string with contact information, or they may be IP-blocked without notice. Connection closed by foreign host. 6
HTTP další informace v hlavičce II :: LAB telnet www.wikipedia.org 80 Trying 91.198.174.225... Connected to wikipedia-lb.esams.wikimedia.org. GET / HTTP/1.0 User-Agent: telnet HTTP/1.0 200 OK Date: Tue, 25 Oct 2011 12:24:26 GMT Server: Apache X-Content-Type-Options: nosniff Cache-Control: s-maxage=3600, must-revalidate, max-age=0 Last-Modified: Sun, 16 Oct 2011 20:07:48 GMT Vary: Accept-Encoding Content-Length: 5921 Content-Type: text/html; charset=utf-8 Connection: close <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> Connection closed by foreign host. 7
HTTP určení hostitele III :: LAB Použití (open) proxy serveru [http://www.xroxy.com/proxylist.htm] telnet 188.175.134.98 3128 Trying 188.175.134.98... Connected to 188.175.134.98. GET http://www.seznam.cz/ HTTP/1.0 HTTP/1.0 200 OK Server: nginx/1.0.0 Date: Tue, 25 Oct 2011 12:57:59 GMT Content-Type: text/html; charset=utf-8 Cache-Control: max-age=0, no-cache, no-store, mustrevalidate Set-Cookie: hw=86400; Domain=.seznam.cz; expires=... Set-Cookie: hint=mtmxotu0nzq3oswwow==; Domain=.seznam.cz;... X-XRDS-Location: http://id.seznam.cz/yadis Expires: Tue, 25 Oct 2011 12:57:59 GMT Pragma: no-cache <!DOCTYPE html> Connection closed by foreign host. 8
HTTP autentizace Pokud jde požadavek přes proxy server, kde je třeba být autorizován, je potřeba do hlavičky požadavku přidat položku Proxy-Authorization, která bude obsahovat přihlašovací údaje. např. ve formátu Basic base64[user:pass] Příklad v shellu: echo -n 'lukas:tajneheslo' uuencode -m - begin-base64 644 - bhvryxm6dgfqbmvozxnsbw== ==== Položka hlavičky by v tomto případě vypadala násldovně: Proxy-Autorization: Basic bhvryxm6dgfqbmvozxnsbw== Stejně funguje také HTTP Basic autorizace 9
HTTP přenos dat I Spojení klienta se serverem může být Separátní Perzistentní Data mohou být obsažena v jedné odpovědi, nebo rozdělena do několika odpovědí (chunked), např. při: Generování obsahu (ještě není známa velikost) Pro více různých obsahů (např. obrázky) Chunked encoding Data jsou rozdělena do několika bloků (chunks) V hlavičce odpovědi musí být Transfer-Encoding: chunked Tělo obsahuje jednotlivé bloky Každý blok začíná svoji délkou zapsanou hexadecimálně. 10
HTTP přenos dat II Chunked encoding Chunked-Body ::= chunk* last-chunk trailer CRLF chunk ::= chunk-size CRLF chunk-data CRLF last-chunk ::= "0" CRLF trailer ::= (entity-header CRLF)* Každá HTTP/1.1 aplikace musí být schopna přijmout a dekódovat chunks encoding. Proxy server může spojit jednotlivé části do jedné 11
HTTP chunk encoding :: LAB Přenos dat po částech telnet www.google.com 80 Trying 74.125.39.105... Connected to www.l.google.com. GET / HTTP/1.1 Host: www.google.cz HTTP/1.1 200 OK Date: Tue, 25 Oct 2011 13:11:20 GMT X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked 1000 <!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-2"><title>google</title>... 4ac ull)google.nav&&google.nav.go?... 0 12
HTTP metody I GET (bezpečná) Požadavek o zdroj reprezentován URI (bez vedlejších efektů) V případě žádosti o zpracování pouze výsledek, nikoli zdrojový kód Požadavek může být podmíněný (cache) nebo částečný (partial) HEAD (bezpečná) Identická metoda jako GET, server odesílá stejné informace, avšak bez těla odpovědi (slouží především pro testování) POST Odeslání informací (v těle požadavku) na server ke zpracování OPTIONS (bezpečná) Požadavek na informace o možnostech zdroje (URI) nebo serveru * 13
HTTP metody II TRACE (bezpečná) Kopie požadavku (informace o změnách provedených na serverech vedoucích k cíli) PUT (idempotentní) Nahrává data zdroje na serveru DELETE (idempotentní) Maže zdroj na serveru CONNECT Překládá požadavek na spojení na trasparentní TCP/IP tunel (obvykle při SSL komunikaci přes proxy server) 14
HTTP metody I :: LAB Zjištění podporovaných metod serveru (Options) telnet ewait.felk.cvut.cz 80 Trying 147.32.80.97... Connected to ewait.felk.cvut.cz. OPTIONS / HTTP/1.0 HTTP/1.1 200 OK Date: Tue, 25 Oct 2011 15:01:38 GMT Server: Apache Allow: GET,HEAD,POST,OPTIONS Content-Length: 0 Connection: close Content-Type: text/html Connection closed by foreign host. 15
HTTP metody II :: LAB Trasování požadavku (Trace) telnet webdev.felk.cvut.cz 80 Trying 147.32.80.90... Connected to webdev.felk.cvut.cz. TRACE / HTTP/1.0 HTTP/1.1 200 OK Date: Tue, 25 Oct 2011 15:28:09 GMT Server: Apache Connection: close Content-Type: message/http TRACE / HTTP/1.0 Connection closed by foreign host. 16