Ga naar hoofdinhoud

HTTP-headers

Je kent nu de startlijn van een request (methode + URL) en de statuslijn van een response (statuscode). Maar een HTTP-bericht bevat meer dan alleen die eerste regel. Direct erna volgen de headers: sleutel-waardeparen die aanvullende informatie meegeven over het bericht. Ze staan tussen de statuslijn en de body, gescheiden door een lege regel.

Request-headers (client → server)

Request-headers vertellen de server wie de client is en wat hij wil.

HeaderVoorbeeldBetekenis
HostHost: www.example.comVerplicht in HTTP/1.1. Geeft aan voor welk domein het request bestemd is (cruciaal bij virtual hosting).
User-AgentUser-Agent: Mozilla/5.0Identificeert de client (browser, curl, app). Wordt door servers gebruikt voor statistieken of omleiding.
AcceptAccept: text/html, application/jsonWelke content-types de client aanvaardt. Geeft de server de keuze om het gewenste formaat te sturen.
Accept-LanguageAccept-Language: nl, en;q=0.9Gewenste taal van de content.
AuthorizationAuthorization: Bearer eyJhbGci…Authenticatietoken, bearer-token, Basic-auth, … De manier waarop een client zichzelf identificeert bij elk afzonderlijk request, nodig omdat HTTP stateless is.
Content-TypeContent-Type: application/jsonHet formaat van de request-body (bij POST/PUT/PATCH).
Content-LengthContent-Length: 247Grootte van de request-body in bytes.
CookieCookie: session=abc123Cookies die de client eerder van de server ontving en nu terugstuurt, zo kan de server de sessie herkennen, ook al is HTTP stateless (zie Cookies, sessions & CORS).

Host: waarom verplicht?

Op één server kunnen meerdere domeinen draaien (virtual hosting). De Host-header vertelt de server voor welk domein het verzoek bedoeld is, zodat het juiste antwoord teruggestuurd kan worden.

Response-headers (server → client)

Response-headers vertellen de client wat hij ontvangt en hoe hij daarmee om moet gaan.

HeaderVoorbeeldBetekenis
Content-TypeContent-Type: text/html; charset=UTF-8Het formaat van de response-body. De browser gebruikt dit om de inhoud correct te interpreteren.
Content-LengthContent-Length: 4823Grootte van de response-body in bytes.
Cache-ControlCache-Control: max-age=3600Hoe lang (in seconden) de client de response mag cachen. no-cache/no-store verbiedt caching.
LocationLocation: https://nieuw.example.com/Bij 3xx-redirects (zie Statuscodes): de nieuwe URL waarnaar de client moet gaan.
ServerServer: nginx/1.24.0Identificeert de serversoftware.
Set-CookieSet-Cookie: session=abc123; Path=/; HttpOnlyLaat de client een cookie opslaan. Bij het volgende request stuurt de client dat cookie terug via de Cookie-header.

Content-Type: het belang van het formaat

Content-Type is een van de belangrijkste headers. Het vertelt de ontvanger hoe de bytes in de body geïnterpreteerd moeten worden:

WaardeGebruik
text/htmlHTML-pagina's
text/plainGewone tekst
application/jsonJSON-data (API's, het formaat leer je in JSON, REST & clientverzoeken)
application/x-www-form-urlencodedFormulierdata (standaard HTML-formulier)
multipart/form-dataFormulier met bestanden
image/png, image/jpegAfbeeldingen

Een mismatch tussen de werkelijke inhoud en Content-Type leidt tot parseerfouten of veiligheidsrisico's.

Headers lezen en instellen met curl

curl -I https://www.example.com # HEAD-request: alleen response-headers
curl -v https://www.example.com # verbose: toon request én response (inclusief headers)
curl -H "Accept: application/json" https://api.example.com/data # extra header meesturen
curl -H "Authorization: Bearer mijntoken" https://api.example.com/secure

In de verbose (-v) uitvoer beginnen request-headers met > en response-headers met <:

> GET / HTTP/1.1
> Host: www.example.com
> User-Agent: curl/8.1.2
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Content-Length: 1270
<
Onthoud
  • Headers zijn sleutel-waardeparen tussen de statuslijn en de body.
  • Request-headers (client → server): Host (verplicht), User-Agent, Accept, Authorization (identificatie bij elk request), Content-Type (bij body).
  • Response-headers (server → client): Content-Type, Content-Length, Cache-Control, Location (bij 3xx-redirects), Set-Cookie.
  • curl -I toont enkel response-headers; curl -v toont de volledige request-response-uitwisseling.