Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták 25.4.2005
Obsah Úvod Vrstvy podle TCP/IP Požadavek / Odpověď Metody požadavku Hlavičky Kódy odpovědi Ukázka 25.4.2005 Pavel Šinták 2/30
Úvod protokol aplikační úrovně běžně na TCP portu 80 bezestavový (požadavek / odpověď) textově orientovaný 1991 HTTP verze 0.9 (CERN) 1996 HTTP/1.0 RFC1945 1999 HTTP/1.1 RFC2616 25.4.2005 Pavel Šinták 3/30
HTTP/1.1! Host hlavička více požadavků přes jedno TCP spojení (pipelining) jinak musí přidat Connection: close více domén na jedné IP adrese chunked encoding tělo po částech server může odpovídat HTTP/1.1 100 Continue vylepšená podpora cache server musí přidat Date hlavičku přidané hlavičky 25.4.2005 Pavel Šinták 4/30
Vrstvy podle TCP/IP HTTP TCP IP Aplikační vrstva Transportní vrstva Síťová vrstva Ethernet,TokenRing,... Vrstva síťového rozhraní 25.4.2005 Pavel Šinták 5/30
Postup spojení 1. klient naváže TCP spojení na IP adresu (adresa serveru) a port (standardně 80) 2. klient zašle HTTP požadavek na server 3. server zašle HTTP odpověď klientovi a. server uzavře TCP spojení b. klient zašle další požadavky v rámci TCP 25.4.2005 Pavel Šinták 6/30
Vrstvení zprávy (Ethernet II) Ethernet II Destination: 00:50:fc:32:ea:a5 (EdimaxTe_32:ea:a5) Source: 00:10:dc:c2:ed:0c (Micro-St_c2:ed:0c) Type: IP (0x0800) Internet Protocol Transmission Control Protocol Hypertext Transfer Protocol 25.4.2005 Pavel Šinták 7/30
Vrstvení zprávy (IP) Internet Protocol Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 Total Length: 222 Identification: 0x3b66 (15206) Flags: 0x04 Fragment offset: 0 Time to live: 128 Protocol: TCP (0x06) Header checksum: 0xe204 (correct) Source: psintak.kk.zcu.cz (10.40.5.153) Destination: titan.zcu.cz (147.228.57.10) Transmission Control Protocol Hypertext Transfer Protocol 25.4.2005 Pavel Šinták 8/30
Vrstvení zprávy (TCP) Transmission Control Protocol Source port: 1620 (1620) Destination port: http (80) Sequence number: 1 Next sequence number: 183 Acknowledgement number: 1 Header length: 20 bytes Flags: 0x0018 (PSH, ACK) Window size: 8760 Checksum: 0xce2b (correct) Hypertext Transfer Protocol 25.4.2005 Pavel Šinták 9/30
Vrstvení zprávy (HTTP) Hypertext Transfer Protocol GET / HTTP/1.0 \r\n Accept: */* \r\n Accept-Language: cs \r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 1.1.4322) \r\n Host: www.zcu.cz \r\n Connection: Keep-Alive \r\n \r\n 25.4.2005 Pavel Šinták 10/30
Požadavek (Request) <metoda> <URI> <verze> CRLF <hlavička>* CRLF CRLF <tělo> GET / HTTP/1.1 Host: www.zcu.cz 25.4.2005 Pavel Šinták 11/30
Odpověď (Response) <verze> <kód> <popis> CRLF <hlavička>* CRLF CRLF <tělo> HTTP/1.1 200 OK Content-Type: text/html Content-Length: 8969 Connection: close <HTML> <HEAD>... 25.4.2005 Pavel Šinták 12/30
Verze protokolu podle podporované verze HTTP HTTP/<hlavní>.<vedlejší> HTTP/0.9, HTTP/1.0, HTTP/1.1 klient požadavek 1.0 server umí 1.1 server odpovídá 1.1 zpětná kompatibilita 25.4.2005 Pavel Šinták 13/30
URI Uniform Resource Identifiers RFC 2396 relativní (i absolutní pro 1.0) adresa do budoucna opět absolutní (HTTP/1.2) http://host[:port][path[?query]] 25.4.2005 Pavel Šinták 14/30
Metody požadavku GET obdržení cíle (od 0.9) HEAD cíl bez těla (od 1.0...) POST odeslání dat + získání cíle OPTIONS podporované metody (od 1.1...) PUT nahrání na cíl DELETE smazání cíle TRACE sledování cesty CONNECT tunel pro proxy 25.4.2005 Pavel Šinták 15/30
GET pro obdržení zadaného cíle z URI parametry předává v URI délka URI není RFC omezena (ale 255) HTTP/0.9 GET / HTTP/1.0 GET http://www.zcu.cz/ HTTP/1.0 HTTP/1.1 GET / HTTP/1.1 Host: www.zcu.cz 25.4.2005 Pavel Šinták 16/30
HEAD pro obdržení hlavičky od zadaného cíle stejný jako GET, jen bez těla odpovědi HEAD / HTTP/1.1 Host: www.zcu.cz 25.4.2005 Pavel Šinták 17/30
POST pro odeslání dat na server odesílání argumentů, nahrávání souborů data v těle za hlavičkou POST /test.php HTTP/1.1 Host: www.zcu.cz Content-Type: application/x-www-form-urlencoded Content-Length: 8 text=nic 25.4.2005 Pavel Šinták 18/30
OPTIONS zjištění metod podporovaných serverem odpověď bez těla OPTIONS * HTTP/1.1 Host: www.zcu.cz HTTP/1.1 200 OK Allow: GET,HEAD,POST,OPTIONS,TRACE 25.4.2005 Pavel Šinták 19/30
Obecné hlavičky Cache-Control nastavenícache Connection (close) uzavření spojení Date Pragma původní nastavení cache Trailer Transfer-Encoding kódování přenosu Upgrade přidané protokoly Via Warning 25.4.2005 Pavel Šinták 20/30
Hlavičky požadavku Accept (*/*) - MIME Accept-Charset Accept-Encoding -obsah Accept-Language (cs) Authorization Expect From -email Host!!! If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Max-Forwards Proxy-Authorization Range Referer TE User-Agent 25.4.2005 Pavel Šinták 21/30
Hlavičky odpovědi Accept-Ranges Age ETag Location přesměrování Proxy-Authenticate Retry-After Server popis serveru Vary WWW-Authenticate (Basic/Digest) 25.4.2005 Pavel Šinták 22/30
Hlavičky pro tělo Allow podporované metody Content-Encoding (gzip) - kódování těla Content-Language Content-Length velikost těla Content-Location externí tělo Content-MD5 Content-Range Content-Type (MIME; charset=) Expires Last-Modified 25.4.2005 Pavel Šinták 23/30
Kódy odpovědi <kód> <popis> 1xx informační 2xx úspěch 3xx přesměrování 4xx chyba na straně klienta 5xx chyba na straně serveru 25.4.2005 Pavel Šinták 24/30
Běžně používané kódy 100 Continue 200 OK 301 Moved permanently 304 Not Modified 400 Bad request 401 Unauthorized 403 Forbidden 404 Not found 500 Internal error 501 Not implemented 503 Service Unavailable 25.4.2005 Pavel Šinták 25/30
Ukázka (1) - požadavek GET / HTTP/1.0 Accept: */* Accept-Language: cs User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 1.1.4322) Host: www.zcu.cz Connection: Keep-Alive 25.4.2005 Pavel Šinták 26/30
Ukázka (2) - odpověď HTTP/1.1 200 OK Date: Sat, 23 Apr 2005 12:52:40 GMT Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7c Accept-Ranges: bytes Connection: close Content-Type: text/html <html> <head> <title>zapadoceska univerzita v Plzni</title> 25.4.2005 Pavel Šinták 27/30
Ukázka (3) - požadavek GET /zcu/zcu.css HTTP/1.0 Accept: */* Referer: http://www.zcu.cz/ Accept-Language: cs If-Modified-Since: Mon, 03 Jan 2005 08:57:01 GMT If-None-Match: "1800455-15b-ef7e3140" User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 1.1.4322) Host: www.zcu.cz Connection: Keep-Alive 25.4.2005 Pavel Šinták 28/30
Ukázka (4) - odpověď HTTP/1.1 304 Not Modified Date: Sat, 23 Apr 2005 12:52:40 GMT Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7c Connection: Keep-Alive Keep-Alive: timeout=15, max=100 ETag: "1800455-15b-ef7e3140" 25.4.2005 Pavel Šinták 29/30
Použité zdroje http://www.rfc.net/rfc2616.html http://www.jmarshall.com/easy/http/ http://www.root.cz/clanky/protokolhttp-1-1-pod-lupou/ http://www.kiv.zcu.cz/~brada/vyuka/pi a/slides/05-http.pdf 25.4.2005 Pavel Šinták 30/30