HTTP

**Hypertext Transfer Protocol** (**HTTP**), norsk *hypertekstoverføringsprotokoll*, er protokollen som primært benyttes på verdensveven for å utveksle informasjon mellom en tjener og en klient.

HTTP ble utvikla av World Wide Web Consortium og arbeidsgrupper i Internet Engineering Task Force, og resulterte i en serie med RFCer, deriblant RFC 2616, som spesifiserer HTTP/1.1 (versjonen som vanligvis brukes i dag) som den viktigste.

Noen nettlesere krever også at man angir denne protokollen i selve adresselinjen, slik som  På denne måten skiller man dataoverføringer ved hjelp av http (dvs. vanlige nettsider) fra andre typer, f.eks. FTP, som er en protokoll for å laste filer opp og ned mellom datamaskiner på nett, eller  som forteller nettleseren at man ønsker å sende en e-post til vedkommende adresse.

## Funksjonalitet
HTTP er en forespørsel/respons protokoll mellom klienter og tjener. En HTTP-klient, slik som en nettleser, oppretter typisk en TCP forbindelse over IP-protokollen til en spesiell port (port 80) på en annen vert. En HTTP-tjener lytter på den porten og venter på at klienten skal sende en forespørselstreng, slik som «GET / HTTP/1.1» (som vil resultere i at tjeneren sender standardsida fra en vevtjener). Etter forespørselstrengen kan en MIME melding følge, som har et hode som inneholder et antall parametre som beskriver ulike aspekter av forespørselen og et valgfritt innhold med vilkårlige data. Når en tjener mottar en forespørselstreng (og muligens ei melding), sender tjeneren tilbake en responsstreng som for eksempel «200 OK», og ei melding der kroppen kan være fila som ble forespurt, ei feilmelding eller annen informasjon.

HTTP er forskjellig fra andre TCP-baserte protokoller som FTP ved at forbindelser vanligvis blir avslutta så snart en bestemt forespørsel (eller en serie med relaterte forespørsler) har blitt fullført. Denne teknikken gjør HTTP velegna for verdensveven der sider ofte lenkes til sider på andre tjenere. Teknikken kan noen ganger føre til problemer for utviklere, siden mangelen på en varig forbindelse gjør det nødvendig å ha andre måter å ta vare på tilstandsinformasjon for brukere. De fleste løsninger på problemet involverer bruken av informasjonskapseler. 

Det finnes også en sikker variant av HTTP som kalles HTTPS som kan bruke hvilken som helst krypteringsmetode så lenge den er forstått av begge sider av forbindelsen.

Lokasjoner til HTTP- og HTTPS-sider oppgis som *[[Uniform Resource Locator|URL-er (Uniform Resource Locators)]]*. Denne adresseringsmåten ble lagd for lenking i HTML-dokumenter.

## Eksempel
Nedenfor er et eksempel på ei samtale mellom en HTTP-klient og en HTTP-tjener (www.google.com, lytter på port 80).

**Klientforespørsel**:

```
GET / HTTP/1.1
Host: www.google.com
```


(Fulgt av et linjeskift, i form av vognretur (*carriage return*) fulgt av linjeskift.)

**Tjenerrespons**:

```
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive
```


(Fulgt av ei blank linje og HTML-tekst som består av Googles hovedside.)
----

I HTTP versjon 1.0 sender en klient en forespørsel til en tjener. Tjeneren svarer klienten. Etter denne utvekslinga
så vil forbindelsen bli frigitt. I HTTP 1.1 derimot støttes varige forbindelser. Dette gjør det mulig for klienten
å sende en forespørsel og få et svar, for deretter å sende flere forespørsler og få svar over den samme TCP-forbindelsen.
TCP-forbindelsen blir altså ikke frigjort for hver forespørsel, men brukes til flere. Dette reduserer *overhead* 
i forbindelse med TCP, så kostnaden i form av nettverk og systemressurser reduseres. Det er også mulig å 
sende flere enn en (vanligvis to) forespørsler før noe svar mottas fra foregående forespørsler. Denne teknikken er også kjent som *HTTP pipelining*.

## Referanser


## Se også
*Liste over HTTP-statuskoder

## Eksterne lenker
* Tim Berners-Lee's originale kladd fra 1992 http://www.w3.org/Protocols/HTTP/HTTP2.html
* RFC 2616 – Nåværende HTTP/1.1 spesifikasjon.
* HTTP/1.1 specification errata
* Kommando-linje HTTP-klienter: cURL, 
* Wget
* HTTP Request W3
* HTTP Responce W3