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 ●
●
●
Lze použít s HTTP/1.0 i HTTP/1.1
Name-based virtual hosting ●
●
●
●
Pro každou hostovanou doménu je vyhrazena jedna nesdílená IP adresa.
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. Escape character is '^]'. GET / HTTP/1.1↵ Host: www.google.cz↵ ↵ Trying 74.125.39.105... Connected to www.l.google.com. Escape character is '^]'. GET http://www.google.cz/ HTTP/1.0↵ ↵ Trying 74.125.39.105... Connected to www.l.google.com. Escape character is '^]'. 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. Escape character is '^]'. GET / HTTP/1.1↵ ↵ Trying 77.75.72.3... Connected to www.seznam.cz. Escape character is '^]'. 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. Escape character is '^]'. 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. Escape character is '^]'. 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 … 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. Escape character is '^]'. 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 … 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. Escape character is '^]'. 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 <meta http-equiv="content-type" content="text/html; charset=ISO-88592">
Google... 4ac ull)google.nav&&google.nav.go?... 12 0
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. Escape character is '^]'. 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. Escape character is '^]'. 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