Hypertext Transfer Protocol

Från Wikipedia
(Omdirigerad från HTTP)
Hoppa till: navigering, sök
Protokollstack för IP-nätverk
IP-skikt
Protokoll
5. Applikation  BitTorrent | DHCP | DNS | FTP | HTTP | IMAP | IRC | NNTP | POP3 | RTP | SIP | SMTP | SNMP | SSH | Telnet | TLS | SSL | TFTP
4. Transport DCCP | SCTP | TCP | UDP | IL | RUDP
3. Nätverk ARP | BGP | ICMP | IGMP | IP (IPv4 | IPv6) | RIP
2. Länk ATM | Ethernet | FDDI | ISDN | MPLS | Token Ring | PPP | SLIP | Wi-Fi
1. 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 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 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. 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 i form av en sträng, tillsammans med en datamängd som innehåller det efterfrågade dokumentet, om detta återfanns på server.

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 den ordning de var refererade på sidan. 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[redigera | redigera wikitext]

HTTP oftast beroende på GET eller POST definierar åtta åtgärder som en klient kan begära utförande av på en fil på en HTTP-server:

  • GET – Ber servern att skicka den utpekade filen till klienten. Detta är i särklass det mest använda HTTP-kommandot.
  • HEAD – Ber servern att skicka information om den utpekade filen, men utan att skicka själva innehållet i filen.
  • POST – Sänder någon form av information, till exempel användarens namn och lösenord till servern (exempelvis genom HTML-taggen <form>).
  • 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 åtföljs av en HTTP-statuskod.

Versioner av HTTP[redigera | redigera wikitext]

HTTP särskiljer sig från andra TCP-baserade protokoll såsom FTP i det att HTTP förekommer i ett antal olika versioner:

  • 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 Den senaste versionen. 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.

Exempel[redigera | redigera wikitext]

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[redigera | redigera wikitext]

Externa länkar[redigera | redigera wikitext]