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.
| Header | Voorbeeld | Betekenis |
|---|---|---|
| Host | Host: www.example.com | Verplicht in HTTP/1.1. Geeft aan voor welk domein het request bestemd is (cruciaal bij virtual hosting). |
| User-Agent | User-Agent: Mozilla/5.0 | Identificeert de client (browser, curl, app). Wordt door servers gebruikt voor statistieken of omleiding. |
| Accept | Accept: text/html, application/json | Welke content-types de client aanvaardt. Geeft de server de keuze om het gewenste formaat te sturen. |
| Accept-Language | Accept-Language: nl, en;q=0.9 | Gewenste taal van de content. |
| Authorization | Authorization: Bearer eyJhbGci… | Authenticatietoken, bearer-token, Basic-auth, … De manier waarop een client zichzelf identificeert bij elk afzonderlijk request, nodig omdat HTTP stateless is. |
| Content-Type | Content-Type: application/json | Het formaat van de request-body (bij POST/PUT/PATCH). |
| Content-Length | Content-Length: 247 | Grootte van de request-body in bytes. |
| Cookie | Cookie: session=abc123 | Cookies 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.
| Header | Voorbeeld | Betekenis |
|---|---|---|
| Content-Type | Content-Type: text/html; charset=UTF-8 | Het formaat van de response-body. De browser gebruikt dit om de inhoud correct te interpreteren. |
| Content-Length | Content-Length: 4823 | Grootte van de response-body in bytes. |
| Cache-Control | Cache-Control: max-age=3600 | Hoe lang (in seconden) de client de response mag cachen. no-cache/no-store verbiedt caching. |
| Location | Location: https://nieuw.example.com/ | Bij 3xx-redirects (zie Statuscodes): de nieuwe URL waarnaar de client moet gaan. |
| Server | Server: nginx/1.24.0 | Identificeert de serversoftware. |
| Set-Cookie | Set-Cookie: session=abc123; Path=/; HttpOnly | Laat 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:
| Waarde | Gebruik |
|---|---|
text/html | HTML-pagina's |
text/plain | Gewone tekst |
application/json | JSON-data (API's, het formaat leer je in JSON, REST & clientverzoeken) |
application/x-www-form-urlencoded | Formulierdata (standaard HTML-formulier) |
multipart/form-data | Formulier met bestanden |
image/png, image/jpeg | Afbeeldingen |
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
<
- 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 -Itoont enkel response-headers;curl -vtoont de volledige request-response-uitwisseling.