Hypertext Transfer Protocol

Hypertext Transfer Protocol (HTTP) är det kommunikationsprotokoll som används för att överföra webbsidor på informationsnätverket WWW, World Wide WebInternet. 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.

Typer av förfrågningar

HTTP definierar åtta kommandon som en klient kan skicka till en resurs på en HTTP-server:

  • GET – Ber servern att skicka den utpekade filen (eller resultatet av en programkörning, databasförfrågan eller motsvarande) till klienten. Detta är i särklass det mest använda HTTP-kommandot.
  • HEAD – Ber servern att skicka information om den utpekade resursen, men utan att skicka själva innehållet i filen.
  • POST – Sänder någon form av information till servern, utöver själva förfrågan, vanligen motsvarande en webblankett. Detta används dels då förfrågan ändrar information på servern, såsom då man gör en bokning, dels då innehållet väntas vara större än vad som är lämpligt att hantera som en webbadress (eller annars olämpligt, såsom lösenord).
  • PUT – Om tillåtelse ges, laddar upp en utpekad fil från klienten till servern för lagring.
  • DELETE – Raderar den utpekade filen. Detta kommando används sällan och många webbservrar har inget stöd för det.
  • TRACE – Ber servern att skicka tillbaka klientförfrågan precis i det skick som den anlände till servern. Detta kommando kan användas för att kontrollera om någon tredje part mellan klient och server har gjort några ändringar i förfrågan.
  • OPTIONS – Returnerar en lista över de HTTP-kommandon som servern stöder.
  • CONNECT – Används med proxy-servrar som kan fungera som SSL-tunnlar.

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.).

Versioner av HTTP

HTTP förekommer i ett antal olika versioner, som alltid anges explicit:

  • 0.9 Numera överflödig. Användes aldrig i någon större utsträckning. Stöder endast metoden GET. I denna version av HTTP saknas möjlighet för klienten att skicka information från till exempel formulär till servern.
  • HTTP/1.0 Idag omodern men fortfarande brett använd, i synnerhet av proxy-servrar. Denna version av HTTP har även stöd för så kallade keep-alive-uppkopplingar, som låter klienten begära överföring av mer än en fil per TCP-uppkoppling mot servern. Detta kan dock bara förväntas fungera bra i frånvaron av mellanliggande proxy-servrar.
  • HTTP/1.1 Keep-alive-uppkopplingar används här som standard och mellanliggande proxy-servrar utgör inget problem. HTTP/1.1 stöder även så kallade ”request pipelining”, vilket låter klienten skicka flera förfrågningar samtidigt till server. Detta tillåter servern att bättre förbereda sig för att svara på alla förfrågningar, så att den kan arbeta mer effektivt.
  • HTTP/2 Baserad på Googles protokoll SPDY. HTTP/2 tillåter en server att svara med mer data än vad klienten har begärt, om den förutspår att klienten kommer att behöva datan senare (exempelvis bilder på en webbsida). HTTP/2 komprimerar även headerdatan mer effektivt än vad HTTP/1.1 gör, och kan även multiplexa förfrågningar över samma TCP-anslutning. Detta gör HTTP/2 mer nätverksvänligt än tidigare HTTP-versioner.
  • HTTP/3 Den senaste versionen, använder samma semantik som tidigare versioner, men använder QUIC (UDP) istället för TCP för transport [1].

Exempel

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

Se även

Källor

Externa länkar