Hypertext Transfer Protocol (HTTP) is het protocol voor de communicatie tussen een webclient (meestal een webbrowser of een app) en een webserver. Dit protocol wordt niet alleen veel op het wereldwijde web gebruikt, maar ook op lokale netwerken (we spreken dan van een intranet).

In HTTP is vastgelegd welke vragen (de Engelse term hiervoor is requests) een cliënt aan een server kan stellen en welke antwoorden (de Engelse term is responses) een webserver daarop kan teruggeven. Elke vraag bevat een URL die naar een webcomponent of een statisch object zoals een webpagina of plaatje verwijst.

HTTP-requests

Een HTTP-request bestaat uit de requestsoort, de URL, de headervelden (koptitelvelden) en eventueel een inhoud. Een overzicht van de HTTP-requestmethoden:

De belangrijkste headervelden zijn:

* geïntroduceerd in HTTP 1.1[1]

Een complete aanvraag inclusief de headervelden kan er voor HTTP 1.1 als volgt uitzien:

GET /wiki/Hoofdpagina HTTP/1.1
Host: nl.wikipedia.org
Connection: close
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
Accept: text/xml,text/html,text/plain,image/png,image/jpeg,image/gif
Accept-Charset: ISO-8859-1,utf-8

HTTP-responses

Zie ook de Lijst van HTTP-statuscodes

Een HTTP-response bestaat uit een resultaatcode, headervelden en een body (de boodschap). De resultaatcode bestaat uit minimaal drie cijfers. Het eerste cijfer is het belangrijkste:

De meest voorkomende resultaatcodes zijn:

Een reactie op bovenstaande aanvraag kan er dan als volgt uitzien:

HTTP/1.1 200 OK
Date: Thu, 08 Apr 2004 18:24:33 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4
X-Powered-By: PHP/4.3.4
Content-Language: nl
Content-Type: text/html; charset=iso-8859-1
X-Cache: MISS from wikipedia.org
Connection: close
Content-Type: text/html
Content-Length: 49
<html>
<head>
</head>
<body>
</body>
</html>

Geschiedenis

De oorspronkelijke versie van HTTP staat bekend onder de naam HTTP 1.0. In eerste instantie voldeed dit protocol goed, maar met de populariteitsexplosie van het internet kwam er ook een aantal tekortkomingen in dit protocol aan het licht. Deze werden opgelost in de volgende versie, HTTP 1.1. Vanaf circa 1997 is de standaard op het World Wide Web dan ook verschoven van HTTP 1.0 naar HTTP 1.1.

Een van de belangrijkste beperkingen van HTTP 1.0 was dat er op ieder IP-adres slechts 1 domein gehuisvest kon worden. Vanwege de enorme groei van het aantal WWW-domeinen, zou dit al gauw tot een tekort aan IP-adressen geleid hebben. HTTP 1.1 ondersteunt dan ook het huisvesten van meer dan 1 domein op hetzelfde IP-adres. Andere belangrijke toevoegingen in HTTP 1.1, die voornamelijk tot doel hebben de responsiesnelheid te verhogen, zijn:

Technische details van HTTP staan beschreven in verschillende RFC's. HTTP-versie 1.0 staat in het RFC met nummer 1945. Versie 1.1 van het protocol staat in RFC met nummer 2616.

HTTP/2

In 2012 begon het werk aan de opvolger van HTTP 1.1, genaamd HTTP/2: IETF richtte de werkgroep HTTP Working Group op.[2] Het was een reactie op de ontwikkeling van het SPDY-protocol dat als experimenteel protocol ontwikkeld werd door Google om de laadtijden van webpagina's te verbeteren ten opzichte van HTTP 1.1.

HTTP/2 is gebaseerd op SPDY en behoudt tegelijk een hoge mate van compatibiliteit met HTTP 1.1. Andere voordelen zijn de lagere latency (vertraging) en andere snelheidsverbeteringen. De grootste verandering is de mogelijkheid om multiplexing toe te passen: meerdere verzoeken kunnen via één verbinding verzonden worden. Hiervoor is headercompressie nodig. De specificatie HPACK specifieert de headercompressie voor HTTP/2.[3]

Daarnaast gebruikt HTTP/2 minder verbindingen tussen de server en de client. HTTP/2 specifieert ook een manier om inhoud van de server naar de browser te sturen, zonder dat de client continu moet vragen of er nieuwe inhoud beschikbaar is.

HTTP/2 boodt in het begin een variant aan zonder TLS/SSL-encryptie aan in RFC met nummer 7540, maar amper gebruik[4] van dit encryptieloze mechanisme werd dit in RFC met nummer 9113 weggehaald[5]. Zo kozen bepaalde softwareleveranciers zoals Mozilla ervoor HTTP/2 enkel te implementeren met SSL.[6]

In februari 2015 werd de HTTP/2-specificatie uitgerold.[3] Midden mei 2015 werd de finale versie van de specificatie vastgelegd als RFC 7540.[7][8]

Zie ook