Protokollstack för IP-nätverk |
---|
Applikation |
BitTorrent · DHCP · DNS · FTP · HTTP · IMAP · IRC · NNTP · POP3 · RTP · SIP · SMTP · SNMP · SSH · Telnet · TLS · SSL · TFTP · BGP |
Transport |
DCCP · SCTP · TCP · UDP · IL · RUDP |
Nätverk |
ARP · ICMP · IGMP · IP (IPv4 · IPv6) · RIP · RARP |
Länk |
ATM · Ethernet · FDDI · ISDN · IS-IS · MPLS · Token Ring · PPP · SLIP · Wi-Fi |
Fysiskt |
IEEE 802 · ISDN · RS-232 · IrDA · Bluetooth · xDSL |
Hypertext Transfer Protocol (HTTP) är det kommunikationsprotokoll som används för att överföra webbsidor på informationsnätverket WWW, World Wide Web på Internet. Det ursprungliga syftet med HTTP var att tillhandahålla en metod för att överföra HTML-sidor från webbservrar till webbklienter.
Utvecklingen av HTTP koordinerades av World Wide Web Consortium (W3C) och arbetsgrupper i Internet Engineering Task Force och kulminerade i publicerandet av en serie RFC:er, av vilka RFC 2616 (tidigare RFC 2068) är av störst vikt, som definierar HTTP/1.1, den version av HTTP som idag är i bredast tillämpning.
HTTP bygger på ett förfrågan/svar-förfarande mellan klient och server. En HTTP-klient, vanligen en webbläsare, som skall hämta en HTML-fil, en bild eller annan fil från en webbserver skickar en förfrågan bestående av en kort textsträng till en TCP-port på servern, vanligen nummer 80. Textsträngen innehåller information om vilken version av HTTP som används, och vilken fil (eller annan resurs eller information) som klienten vill att servern skall skicka. En HTTP-förfrågan kan till exempel se ut som följande: "GET /index.html HTTP/1.1" (vilket med hjälp av HTTP version 1.1 skulle begära en överföring av serverns indexdokument till webbläsaren). Med förfrågan skickas ofta även ett eller flera MIME-meddelanden som innehåller extra information om vad klienten vill ha, till exempel preferens för olika språk och filformat. I HTTP 1.1 (till skillnad från 1.0) är MIME-parametern "Host" (namnet på den anropade webbservern) obligatorisk och måste skickas med varje förfrågan för att servern skall svara. När förfrågan mottagits av servern svarar denna med att skicka tillbaka ett kort svar, tillsammans med en datamängd som innehåller det efterfrågade dokumentet om detta återfanns på servern.
Tidiga versioner av HTTP kunde endast skicka en enda HTTP-förfrågan per TCP-koppling. Detta skapade problem vid webbsidor som innehöll många bilder, eftersom webbläsaren var tvungen att hämta varje bild för sig. I Netscape löstes problemet genom att alltid använda fyra TCP-kopplingar, och växelvis använda dem till att hämta bilder. Denna lösning ledde dock till prestandaproblem eftersom varje TCP-koppling var fristående från varandra och inte kunde reagera på stockning i nätet. I senare versioner av HTTP har man lagt till speciella funktioner för att kunna hämta flera filer samtidigt med samma TCP-koppling, vilket bidrar till att minska problemen.
HTTP definierar åtta kommandon som en klient kan skicka till en resurs på en HTTP-server:
Metoderna GET och HEAD är definierade som säkra, med andra ord avsedda uteslutande för informationshämtning. Icke-säkra metoder (som POST, PUT och DELETE) bör presenteras i webbklienten på något särskilt sätt (till exempel som knappar istället för länkar), så att användaren blir medveten om de potentiella effekterna av deras användning.
HTTP-servrar förväntas implementera åtminstone metoderna GET och HEAD, och om möjligt även OPTIONS.
Svaret från webservern innehåller en HTTP-statuskod, som anger huruvida förfrågan lyckats och i annat fall på vilket sätt den misslyckats (filen saknas, har flyttats eller kräver autentisering, webbservern har tillfälliga problem, förfrågan är felformulerad etc.).
HTTP förekommer i ett antal olika versioner, som alltid anges explicit:
Nedan följer en exempeldialog mellan en HTTP-klient och en HTTP-server. Servern har domännamnet www.example.com och körs på TCP-port 80.
Klientförfrågan (avslutas med en tom rad, så att förfrågan i sin helhet avslutas med två radbrytningar, var och en i form av vagnreturstecken (<CR>) följt av ett radbytestecken (<LF>).):
GET /index.html HTTP/1.1 Host: www.example.com
”Host”-strängen väljer värdens domännamn om flera finns att välja på för den kontaktade datorn. Detta tillåter samma dator att köra flera webbservrar, med olika associerade domännamn, så kallade virtual hosting. Detta var en frivillig komplementsfunktion i HTTP/1.0, men måste stödas av HTTP/1.1-servrar.
Svar från servern (följs av en blank rad och texten i det efterfrågade dokumentet):
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8
|
|