HTTP is de sleutel tot communicatie op het internet. Methoden van het HTTP-protocol stellen clients in staat verzoeken naar servers te sturen en servers om antwoorden terug te sturen. Elke website op het World Wide Web gebruikt HTTP-requests. Daarom is het essentieel om ze te begrijpen. Dit artikel behandelt het concept van HTTP-requests, hun structuur, veelgebruikte methoden en voorbeelden uit de praktijk. Dit helpt om te begrijpen hoe het web functioneert.
Een HTTP-request is een bericht waarin een client – zoals een webbrowser – de host op de server om een specifieke resource vraagt. Clients gebruiken URL’s in HTTP-requests om aan te geven welke resources ze van de server willen opvragen.
Elke HTTP-request bestaat uit drie hoofdcomponenten:
Request line
Headers
Message body
De request line is de eerste regel van een HTTP-request. Deze initialiseert een actie op de server. De request line geeft aan welke HTTP-methode en HTTP-versie de client gebruikt. Naast de methode bevat de request line een URI of URL.
Voorbeeld van een request line:
GET /index.html HTTP/1.1
De headers volgen direct na de request line. Ze geven extra informatie van de client aan de server. Headers bevatten o.a. informatie over de host, de user agent, taalvoorkeuren en meer. De server gebruikt deze gegevens om de browser en het besturingssysteem van de client te identificeren. HTTP-headers zijn hoofdlettergevoelig, gevolgd door een dubbele punt en een waarde.
Voorbeeld van HTTP-request headers:
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Het message body-gedeelte wordt gebruikt om data naar de server te sturen. Het is optioneel: niet elke HTTP-request bevat een body. Of een body wordt gebruikt, hangt af van de HTTP-methode. Requests die een body bevatten gebruiken meestal POST, bijvoorbeeld om formulierdata te versturen. De server verwerkt deze data verder.
Een HTTP-request verbindt de client met de server. Redenen hiervoor kunnen zijn:
een resource opvragen
nieuwe data versturen
bestaande data wijzigen
data verwijderen
Hieronder de belangrijkste en meest gebruikte methoden:
De meest gebruikte HTTP-methode is GET, waarmee de server om specifieke data wordt gevraagd. Elke keer dat een gebruiker een webpagina opent, stuurt de browser een GET-request om de benodigde content op te halen.
Eigenschappen van GET:
cacheable
safe
idempotent
GET kan alleen bestaande data ophalen — het verandert niets aan de server.
Wanneer een client data naar de server moet sturen (bijv. formulieren, uploads), wordt POST gebruikt.
De body bevat de verzonden gegevens. Meerdere POST-requests kunnen meerdere nieuwe resources creëren.
PUT lijkt op POST, maar:
POST = nieuwe data creëren
PUT = bestaande data vervangen
De client moet de volledige nieuwe versie van de resource meesturen. PUT is idempotent – dezelfde request meerdere keren uitvoeren levert hetzelfde resultaat op.
DELETE laat de server weten dat een bepaalde resource moet worden verwijderd.
Als het verwijderen is gelukt, stuurt de server een bevestiging terug. DELETE is eveneens idempotent.
Wanneer de server een antwoord terugstuurt op een HTTP-request, heet dat een HTTP-response. Net als een request bestaat deze uit drie delen:
Status line
Headers
Message body
Deze bevat:
HTTP-versie
Statuscode
Statusbericht
Response headers bevatten extra informatie zoals:
datum en tijd
content-type
serverdetails
cache-instructies
De body bevat de daadwerkelijke gegevens die naar de client worden teruggestuurd, zoals:
HTML
JSON
XML
afbeeldingen
bestanden
HTTP-statuscodes geven aan hoe de server de aanvraag heeft verwerkt. Ze bestaan uit drie cijfers, waarbij het eerste cijfer de categorie bepaalt:
|
Codegroep |
Beschrijving |
|
1xx |
Informatief – verwerking gaat door |
|
2xx |
Succes – verzoek correct verwerkt |
|
3xx |
Redirect – extra acties vereist |
|
4xx |
Clientfout – probleem aan clientzijde |
|
5xx |
Serverfout – probleem aan serverzijde |
Headers bevatten cruciale informatie voor de communicatie tussen client en server. Ze zijn essentieel voor webfunctionaliteit.
Headers geven aan welk domein door de server wordt gehost.
Expires en Cache-Control bepalen hoe lang content wordt opgeslagen.
Headers zoals Set-Cookie en Cookie houden gebruikerssessies bij.
Headers zoals Authorization en Content-Security-Policy beschermen webapplicaties.
Headers geven aan of een request succesvol was of niet.
De voorbeelden hieronder gebruiken Python en de requests-bibliotheek.
import requests
response = requests.get("https://api.example.com/data",
params={"param1": "value1", "param2": "value2"})
print(response.status_code)
print(response.json())
import requests
url = "https://api.example.com/users"
data = {
"username": "newuser",
"email": "newuser@example.com",
"password": "securepassword"
}
response = requests.post(url, json=data)
if response.status_code == 201:
print("User created successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
data = {
"username": "updateduser",
"email": "updateduser@example.com"
}
response = requests.put(url, json=data)
if response.status_code == 200:
print("User updated successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
response = requests.delete(url)
if response.status_code == 204:
print("User deleted successfully.")
else:
print("Error:", response.status_code, response.text)
HTTP-requests spelen een cruciale rol bij webinteracties. Daarom is het belangrijk om de verschillende methoden te kennen en te begrijpen hoe ze werken. Het kiezen van de juiste methode zorgt voor efficiënte communicatie tussen client en server en verbetert de prestaties van webapplicaties.