Klopt, ik heb het net even opgezocht op php.net:
Er zijn twee speciale header calls. De eerste is een header die begint met de string "HTTP/" (case is onbelangrijk), die wordt gebruikt om uit te zoeken welke HTTP status moet worden verzonden. Bijvoorbeeld, als je Apache hebt geconfigureerd om een PHP script te gebruiken om requests voor ontbrekende bestanden af te handelen (door de ErrorDocument directive te gebruiken), wil je er misschien voor zorgen dat je script de goede status code genereert.
PHP:
1
2
3
| <?php
header("HTTP/1.0 404 Not Found");
?> |
Opmerking: De http status header is altijd de eerste die wordt verstuurd naar de client, of de actuele header() nu de eerste aanroep is of niet. De status header kan worden aangepast met het aanroepen van de header() met daarin een nieuwe status regel, mits de headers al niet zijn verstuurd naar de client.
Opmerking: In PHP 3 werkt dit alleen als PHP is gecompileerd als een Apache module. Je kunt echter hetzelfde effect verkrijgen door middel van het gebruiken van de Status header.
PHP:
1
2
3
| <?php
header("Status: 404 Not Found");
?> |
De tweede speciale case is de "Location:" header. Deze header wordt niet alleen teruggestuurd naar de browser, maar hij geeft ook een REDIRECT (302) status code aan de browser tenzij een 3xx status code al eerder werd ingesteld.
PHP:
1
2
3
4
| <?php
header("Location: http://www.php.net/"); /* Stuur de browser naar de PHP website */
exit; /* Zorg dat de code hieronder niet wordt uitgevoerd */
?> |
Opmerking: HTTP/1.1 heeft een absolute URI als argument voor Location:, inclusief het schema, de hostname en absoluut pad, maar sommige clients accepteren relatieve URIs. Je kunt normaal $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] en dirname() gebruiken om zelf een absolute URI te maken van een relatieve:
PHP:
1
2
3
4
5
6
| <?php
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
?>
|
PHP scripts genereren vaak dynamische content die niet mag worden gecached door de client browser of een proxy cache tussen de server en de client browser. Je kunt veel proxies en clients kunnen forceren het cachen uit te zetten met
PHP:
1
2
3
4
5
6
7
8
| <?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in het verleden
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// Altijd veranderd
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?> |
Opmerking: Het zou kunnen dat je pagina's zelfs niet worden gecached als je niet alle headers hierboven meestuurt. Er zijn een aantal opties die gebruikers zelf kunnen instellen voor hun browser die ervoor zorgen dat hun standaard caching gedrag verandert. Door de bovenstaande headers mee te sturen kun je alle instellingen die anders zorgen dat de output van je script wordt gecached overschrijven.
Dus ja, met een location word er ook automatisch een 302 meegestuurd (ik zat hier fout).
Het is dus ook beter om absolete urls op te geven ipv relative urls.
Wat ik me echter nog wel afvraag is of er ook een date word meegestuurd.
[
Voor 6% gewijzigd door
Anoniem: 64721 op 19-05-2006 22:50
]