Ga naar hoofdinhoud

HTTP als protocol

Elke pagina die je opent, elke knop die data ophaalt, elk formulier dat je verstuurt: het gaat allemaal via HTTP. Het is het protocol waarin je als webontwikkelaar het meest zal lezen, schrijven en debuggen.

Het goede nieuws: HTTP is opvallend eenvoudig. Het is tekst. Een request is een paar regels die zeggen wat je wil, een response is een paar regels die zeggen hoe het afliep, gevolgd door de gevraagde inhoud. Alles wat je in de Network tab ziet, is een variatie op die twee berichten.

Waar HTTP zit in het geheel​

HTTP is een applicatieprotocol. Het bouwt op alles wat je in de vorige lessen zag:

LaagWat er gebeurtMeer daarover
ApplicatieHTTP: wat je wil en wat je terugkrijgtdeze pagina
BeveiligingTLS: hetzelfde bericht, versleuteldHTTPS & TLS
TransportTCP op poort 80 of 443TCP/IP, Poorten
InternetIP: adressering en routeringIP-adressering

Voor het eerste HTTP-byte vertrekt, is er dus al een naam opgezocht via DNS, een TCP-verbinding opgezet en meestal ook een TLS-handdruk afgerond. HTTP is de laatste stap, niet de eerste.

Eén request, één response​

HTTP werkt strikt tussen een client en een server:

  • De client (browser, app, curl, Postman, je eigen code) neemt het initiatief en stuurt een request.
  • De server wacht, verwerkt en stuurt een response terug.
Sequentiediagram van HTTP-verkeer: de client stuurt een GET-request, de server verwerkt het en antwoordt met 200 OK; een tweede request op een onbestaande resource krijgt 404 Not Found, want ook een fout is een responseClientServer1GET /posts/1 HTTP/1.1Host: jsonplaceholder.typicode.com2verwerkt3HTTP/1.1 200 OKContent-Type: application/json · { "id": 1, "title": "..." }de server onthoudt niets van request 1: elk request staat op zichzelf (stateless)4GET /posts/999 HTTP/1.1vindt niets5HTTP/1.1 404 Not Foundook dit is een volwaardige response, geen stilteDe client neemt het initiatief. Op elk request volgt exact één response, ook als het fout loopt.Beide berichten zijn gewone tekst: precies wat je in de Network tab of met curl te zien krijgt.

Op elk request volgt exact één response. Ook een foutmelding is een response: 404 is een antwoord, geen stilte.

HTTP is stateless

De server onthoudt tussen twee requests niets over jou. Elk verzoek staat volledig op zichzelf, ook al komen ze een fractie van een seconde na elkaar. Dat je toch ingelogd blijft, komt door cookies, en die bouwen daar bovenop. Zie Cookies, sessions & CORS.

Anatomie van een request​

Een request bestaat uit vier onderdelen:

OnderdeelVoorbeeldWat het zegt
MethodeGETWat de client wil doen
URL/posts/1Met welke resource
HeadersAccept: application/jsonExtra informatie over het verzoek
Body(leeg bij GET)De meegestuurde gegevens

Als tekst over de lijn ziet dat er zo uit:

GET /posts/1 HTTP/1.1
Host: jsonplaceholder.typicode.com
Accept: application/json
User-Agent: curl/8.1.2

De eerste regel heet de startlijn: methode, pad en versie. Daaronder de headers, één per regel. Dan een lege regel, en pas daarna een eventuele body.

Anatomie van een response​

Een response bestaat uit drie onderdelen:

OnderdeelVoorbeeldWat het zegt
Statuscode200 OKHoe het afliep
HeadersContent-Type: application/jsonWat je krijgt en hoe ermee om te gaan
Body{ "id": 1, ... }De inhoud zelf
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 292

{
"userId": 1,
"id": 1,
"title": "sunt aut facere..."
}

Dezelfde opbouw als bij het request: één statuslijn, dan headers, dan een lege regel, dan de body.

Drie manieren om precies hetzelfde te zien​

ToolSterkteWanneer
DevTools Network tabToont alles wat je pagina zelf doet, met timing en initiatorDebuggen van je eigen frontend
curlRuw en exact: je ziet letterlijk elke regel die over de lijn gaatSnel testen, scripts, servers zonder browser
PostmanOverzichtelijk klikken: methode, headers, body, en een geschiedenisEen API verkennen of documenteren

Met curl -v zie je beide berichten na elkaar. De regels met > verstuur je, de regels met < komen terug:

curl -v https://jsonplaceholder.typicode.com/posts/1
> GET /posts/1 HTTP/1.1
> Host: jsonplaceholder.typicode.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
<
{ "userId": 1, "id": 1, "title": "sunt aut facere..." }
Twee testservers die je dit semester nog vaak zal gebruiken
  • jsonplaceholder.typicode.com – een nep-API met posts, users en todo's. Je mag er alles op uitproberen, ook POST en DELETE.
  • httpbin.org – kaatst je eigen request terug als JSON. Ideaal om te zien wat je nu écht verstuurde.

Welke versie van HTTP?​

VersieTransportBelangrijkste verschil
HTTP/1.1TCPEén request tegelijk per verbinding; leesbare tekst
HTTP/2TCPMeerdere requests door elkaar over één verbinding, binair verpakt
HTTP/3QUIC over UDPGeen blokkade meer bij één verloren pakket

De concepten op deze pagina's, methode, URL, headers, statuscode en body, blijven in alle drie identiek. Wij gebruiken HTTP/1.1 als referentie omdat je die als tekst kan lezen.

Opbouw van een HTTP-request en HTTP-response: startlijn, headers, lege regel en body

Bron: HTTP messages – MDN Web Docs, Mozilla Contributors, CC BY-SA 2.5.

Test jezelf​

1. Je stuurt één request en de server heeft veel data. Hoeveel responses krijg je?

2. Wat betekent het dat HTTP stateless is?

3. In welke volgorde gebeuren deze stappen bij het openen van `https://example.com`?

Wat leer je in dit hoofdstuk?​

SectieWat je leert
URI's en URL'sHoe een webadres opgebouwd is en welk deel waar terechtkomt
HTTP-methodenGET, POST, PUT, PATCH en DELETE, en hoe je de juiste kiest
StatuscodesWat 2xx, 3xx, 4xx en 5xx je vertellen over waar het misloopt
HTTP-headersDe metadata die elk bericht begeleidt
JSON, REST & clientverzoekenHoe API's data uitwisselen en hoe je zelf een verzoek opbouwt
Cookies, sessions & CORSIngelogd blijven op een stateless protocol, en waarom je fetch() geblokkeerd wordt
Onthoud
  • HTTP is een applicatieprotocol in leesbare tekst, bovenop TCP (poort 80) of TLS (poort 443).
  • Een request bestaat uit methode, URL, headers en body; een response uit statuscode, headers en body.
  • Op elk request volgt exact één response.
  • HTTP is stateless: elk verzoek staat op zichzelf.
  • curl -v, de Network tab en Postman tonen alle drie hetzelfde verkeer, in een andere verpakking.