Hoofdstuk 22: HTTP Headers

← Terug naar overzicht

Wat zijn HTTP-headers?

Elke keer dat een browser een pagina opvraagt, stuurt de server een antwoord (response). Dat antwoord bestaat uit twee delen: de headers (metadata) en de body (de HTML). Met de header()-functie in PHP kun je deze headers aanpassen.

De meest voorkomende toepassingen:

<?php
// Redirect naar een andere pagina
header("Location: welkom.php");
exit;
?>

Belangrijk: Net als bij cookies en sessions moet header() worden aangeroepen VOORDAT er output naar de browser wordt gestuurd. Zelfs een spatie of lege regel voor <?php kan problemen veroorzaken.

Gebruik ALTIJD exit of die na een header("Location: ...") redirect. Zonder exit gaat je PHP-code gewoon door met uitvoeren, wat onverwacht gedrag of beveiligingsproblemen kan veroorzaken.

Let op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.

Oefening 1

Schrijf een redirect naar "login.php" met header(). Voeg daarna exit toe. (In deze oefening wordt de redirect niet echt uitgevoerd, maar de code moet correct zijn.) Toon voor de header de tekst "Doorsturen...".

Jouw code:

Oefening 2

Schrijf een functie stuurDoor($url) die een redirect uitvoert naar de opgegeven URL en daarna stopt met exit. Roep de functie aan met "dashboard.php". Toon eerst "Redirect naar dashboard.php".

Jouw code:

Oefening 3

Simuleer een logincontrole. Maak een variabele $ingelogd met waarde false. Als de gebruiker NIET is ingelogd, toon "Niet ingelogd, doorsturen...". In een echt script zou je daarna header("Location: login.php") en exit gebruiken.

Jouw code:

HTTP-statuscodes

Met http_response_code() of header() kun je statuscodes instellen. De belangrijkste:

| Code | Betekenis | Gebruik |

|------|-----------|---------|

| 200 | OK | Standaard, alles is goed |

| 301 | Moved Permanently | Permanente redirect |

| 302 | Found | Tijdelijke redirect (standaard bij Location) |

| 403 | Forbidden | Geen toegang |

| 404 | Not Found | Pagina niet gevonden |

| 500 | Internal Server Error | Serverfout |

<?php
// 404-pagina
http_response_code(404);
echo "Pagina niet gevonden";

// Permanente redirect
header("Location: nieuwe-pagina.php", true, 301);
exit;
?>

Oefening 1

Stel de HTTP-statuscode in op 404 met http_response_code() en toon "Pagina niet gevonden".

Jouw code:

Oefening 2

Schrijf een functie toonFout($code) die de juiste statuscode instelt en een bericht toont. Code 403 toont "Toegang geweigerd", code 404 toont "Niet gevonden", code 500 toont "Serverfout". Test met toonFout(403).

Jouw code:

Oefening 3

Schrijf een functie controleerToegang($rol) die controleert of de rol "admin" is. Zo ja, toon "Welkom, admin". Zo nee, stel statuscode 403 in en toon "Toegang geweigerd". Test met de rol "gebruiker".

Jouw code:

Content-type headers

Met de Content-Type-header vertel je de browser wat voor soort data je stuurt. Standaard is dit text/html, maar je kunt ook JSON, platte tekst of andere formaten sturen.

<?php
// JSON-response
header("Content-Type: application/json");
echo json_encode(["status" => "ok", "bericht" => "Data opgeslagen"]);

// Platte tekst
header("Content-Type: text/plain");
echo "Dit is platte tekst";
?>

Oefening 1

Stel de Content-Type header in op "application/json". Maak een associatieve array met "status" ("succes") en "gebruiker" ("Jan"). Toon deze als JSON.

Jouw code:

Oefening 2

Schrijf een functie jsonResponse($data, $statusCode) die de Content-Type op JSON zet, de statuscode instelt, en de data als JSON toont. Test met de array ["fout" => "Niet gevonden"] en statuscode 404.

Jouw code:

Oefening 3

Bouw een mini-API. Schrijf een functie apiResponse($succes, $data). Als $succes true is, stuur statuscode 200 en return ["status" => "ok", "data" => $data] als JSON. Als $succes false is, stuur statuscode 400 en return ["status" => "fout", "bericht" => $data] als JSON. Stel altijd de Content-Type in op JSON. Test met apiResponse(true, ["naam" => "PHP"]).

Jouw code:

Samenvatting