Hypertext Transfer Protocol (HTTP/1.1 –...
Transcript of Hypertext Transfer Protocol (HTTP/1.1 –...
Hypertext Transfer Protocol(HTTP/1.1 – RFC 2616)
Počítačové sítěPavel Šinták25.4.2005
25.4.2005 Pavel Šinták 2/30
Obsah
ÚvodVrstvy podle TCP/IPPožadavek / OdpověďMetody požadavkuHlavičkyKódy odpovědiUkázka
25.4.2005 Pavel Šinták 3/30
Úvod
protokol aplikační úrovněběžně na TCP portu 80bezestavový (požadavek / odpověď)textově orientovaný
1991 – HTTP verze 0.9 (CERN)1996 – HTTP/1.0 RFC19451999 – HTTP/1.1 RFC2616
25.4.2005 Pavel Šinták 4/30
HTTP/1.1! Host hlavičkavíce požadavků přes jedno TCP spojení(pipelining)
jinak musí přidat Connection: closevíce domén na jedné IP adresechunked encoding – tělo po částech
server může odpovídat HTTP/1.1 100 Continuevylepšená podpora cacheserver musí přidat Date hlavičkupřidané hlavičky
25.4.2005 Pavel Šinták 5/30
Vrstvy podle TCP/IP
HTTP
TCP
IP
Ethernet,TokenRing,...
Aplikačnívrstva
Transportnívrstva
Síťová vrstva
Vrstva síťového rozhraní
25.4.2005 Pavel Šinták 6/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 server3. 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 7/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 ProtocolTransmission Control ProtocolHypertext Transfer Protocol
25.4.2005 Pavel Šinták 8/30
Vrstvení zprávy (IP)Internet Protocol
Version: 4Header length: 20 bytesDifferentiated Services Field: 0x00Total Length: 222Identification: 0x3b66 (15206)Flags: 0x04Fragment offset: 0Time to live: 128Protocol: 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 ProtocolHypertext Transfer Protocol
25.4.2005 Pavel Šinták 9/30
Vrstvení zprávy (TCP)Transmission Control Protocol
Source port: 1620 (1620)Destination port: http (80)Sequence number: 1Next sequence number: 183Acknowledgement number: 1Header length: 20 bytes Flags: 0x0018 (PSH, ACK)Window size: 8760Checksum: 0xce2b (correct)
Hypertext Transfer Protocol
25.4.2005 Pavel Šinták 10/30
Vrstvení zprávy (HTTP)Hypertext Transfer Protocol
GET / HTTP/1.0 \r\nAccept: */* \r\nAccept-Language: cs \r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;
.NET CLR 1.1.4322) \r\nHost: www.zcu.cz \r\nConnection: Keep-Alive \r\n\r\n
25.4.2005 Pavel Šinták 11/30
Požadavek (Request)
<metoda> <URI> <verze> CRLF
<hlavička>* CRLF
CRLF
<tělo>GET / HTTP/1.1Host: www.zcu.cz
25.4.2005 Pavel Šinták 12/30
Odpověď (Response)
<verze> <kód> <popis> CRLF
<hlavička>* CRLF
CRLF
<tělo>
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 8969Connection: close
<HTML><HEAD>...
25.4.2005 Pavel Šinták 13/30
Verze protokolu
podle podporované verze HTTPHTTP/<hlavní>.<vedlejší>HTTP/0.9, HTTP/1.0, HTTP/1.1klient požadavek 1.0 server umí 1.1
server odpovídá 1.1zpětná kompatibilita
25.4.2005 Pavel Šinták 14/30
URI
Uniform Resource IdentifiersRFC 2396relativní (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 15/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íleOPTIONS – podporované metody (od 1.1 ...)PUT – nahrání na cílDELETE – smazání cíleTRACE – sledování cestyCONNECT – tunel pro proxy
25.4.2005 Pavel Šinták 16/30
GET
pro obdržení zadaného cíle z URIparametry předává v URIdélka URI není RFC omezena (ale 255)
HTTP/0.9GET / HTTP/1.0
GET http://www.zcu.cz/ HTTP/1.0HTTP/1.1GET / HTTP/1.1Host: www.zcu.cz
25.4.2005 Pavel Šinták 17/30
HEAD
pro obdržení hlavičky od zadaného cílestejný jako GET, jen bez těla odpovědi
HEAD / HTTP/1.1Host: www.zcu.cz
25.4.2005 Pavel Šinták 18/30
POST
pro odeslání dat na serverodesílání argumentů, nahrávání souborůdata v těle za hlavičkouPOST /test.php HTTP/1.1Host: www.zcu.czContent-Type: application/x-www-form-urlencodedContent-Length: 8
text=nic
25.4.2005 Pavel Šinták 19/30
OPTIONS
OPTIONS * HTTP/1.1Host: www.zcu.cz
HTTP/1.1 200 OKAllow: GET,HEAD,POST,OPTIONS,TRACE
zjištění metod podporovaných serveremodpověď bez těla
25.4.2005 Pavel Šinták 20/30
Obecné hlavičkyCache-Control – nastavení cacheConnection (close) – uzavření spojeníDatePragma – původní nastavení cacheTrailerTransfer-Encoding – kódování přenosuUpgrade – přidané protokolyViaWarning
25.4.2005 Pavel Šinták 21/30
Hlavičky požadavkuAccept (*/*) - MIME Accept-CharsetAccept-Encoding - obsahAccept-Language (cs)AuthorizationExpectFrom - emailHost !!!If-MatchIf-Modified-Since
If-None-MatchIf-RangeIf-Unmodified-SinceMax-ForwardsProxy-AuthorizationRangeRefererTEUser-Agent
25.4.2005 Pavel Šinták 22/30
Hlavičky odpovědiAccept-RangesAgeETagLocation – přesměrováníProxy-AuthenticateRetry-AfterServer – popis serveruVaryWWW-Authenticate (Basic/Digest)
25.4.2005 Pavel Šinták 23/30
Hlavičky pro těloAllow – podporované metodyContent-Encoding (gzip) - kódování tělaContent-LanguageContent-Length – velikost tělaContent-Location – externí těloContent-MD5Content-RangeContent-Type (MIME; charset=)ExpiresLast-Modified
25.4.2005 Pavel Šinták 24/30
Kódy odpovědi
<kód> <popis>1xx informační2xx úspěch3xx přesměrování4xx chyba na straně klienta5xx chyba na straně serveru
25.4.2005 Pavel Šinták 25/30
Běžně používané kódy100 Continue200 OK301 Moved permanently304 Not Modified400 Bad request401 Unauthorized403 Forbidden404 Not found500 Internal error501 Not implemented503 Service Unavailable
25.4.2005 Pavel Šinták 26/30
Ukázka (1) - požadavekGET / HTTP/1.0Accept: */*Accept-Language: csUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)Host: www.zcu.czConnection: Keep-Alive
25.4.2005 Pavel Šinták 27/30
Ukázka (2) - odpověďHTTP/1.1 200 OKDate: Sat, 23 Apr 2005 12:52:40 GMTServer: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7cAccept-Ranges: bytesConnection: closeContent-Type: text/html
<html><head><title>Zapadoceska univerzita v Plzni</title>
25.4.2005 Pavel Šinták 28/30
Ukázka (3) - požadavekGET /zcu/zcu.css HTTP/1.0Accept: */*Referer: http://www.zcu.cz/Accept-Language: csIf-Modified-Since: Mon, 03 Jan 2005 08:57:01 GMTIf-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.czConnection: Keep-Alive
25.4.2005 Pavel Šinták 29/30
Ukázka (4) - odpověďHTTP/1.1 304 Not ModifiedDate: Sat, 23 Apr 2005 12:52:40 GMTServer: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7cConnection: Keep-AliveKeep-Alive: timeout=15, max=100ETag: "1800455-15b-ef7e3140"
25.4.2005 Pavel Šinták 30/30
Použité zdroje
http://www.rfc.net/rfc2616.htmlhttp://www.jmarshall.com/easy/http/http://www.root.cz/clanky/protokol-http-1-1-pod-lupou/http://www.kiv.zcu.cz/~brada/vyuka/pia/slides/05-HTTP.pdf