Stijlstek.nl

Headers

Headers

Wat hoort er eigenlijk allemaal thuis bovenaan een XHTML document, voordat de eigenlijke inhoud begint, dus in de http-headers, de html openingstag en het head element? Daar zal ik op ingaan in dit en volgende stukjes. Dit is geïnspireerd door Anne van Kesteren. Om te beginnen: de http-headers.
 
Voordat het eigenlijke document verzonden wordt, verzend de server eerst de zogeheten http-headers. Hierin staat informatie over het type bestand (bijvoorbeeld jpeg, text of html) en de gebruikte karakterset. Er zijn ook andere headers, maar die zijn hier niet van belang (zoals informatie over de server en de datum en tijd). Je kunt de headers zichtbaar maken via deze Web HTTP Header Viewer. Meer informatie is te vinden bij Jukka Korpela.
 
Het verzenden van de juiste headers is te regelen via de server, of een server-side scripting taal zoals PHP. Omdat de headers voor het document verzonden moeten worden, moet het PHP script met de instructies hiervoor dan ook helemaal aan het begin staan. Normale html documenten worden als text/html verzonden, maar voor xhtml documenten is het aanbevolen die als application/xhtml+xml te verzenden (bij XHTML 1.1 is dat zelfs de norm). De meest gebruikte karakterset is ISO-8859-1, maar controleer dit voor de zekerheid, want het kan ook een andere zijn.
 
Zoals ik al eerder geschreven heb, kan de veelgebruikte IE niet met application/xhtml+xml omgaan, dus moeten we in ons PHP script daar rekening mee houden en application/xhtml+xml alleen versturen aan die browsers die dat herkennen. Alle anderen zullen we moeten voorzien van het oude text/html.
 
Een eenvoudig PHP script zou er zo uit kunnen zien:
 
<?php if(stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) { $mime = "application/xhtml+xml"; } else { $mime = "text/html"; }
 
header("Content-Type: $mime; charset=ISO-8859-1"); ?>
 
Nu zijn er ook browsers of webapplicaties die wel dat MIME type aankunnen, maar dat niet aan de server laten weten. Om ook die te voorzien van application/xhtml+xml kunnen we wat "browser-sniffing" toepassen. In dat geval komt het er zo uit te zien:
 
<?php $charset = "ISO-8859-1"; // define encoding used if(stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") || stristr($_SERVER["HTTP_USER_AGENT"],"Opera/6") || stristr($_SERVER["HTTP_USER_AGENT"],"Opera/7") || stristr($_SERVER["HTTP_USER_AGENT"],"WDG_Validator") || stristr($_SERVER["HTTP_USER_AGENT"],"W3C_Validator") || stristr($_SERVER["HTTP_USER_AGENT"],"W3C_CSS_Validator") ) { $browser = "advanced"; // advanced browsers can handle xml } else { $browser = "backwards"; // backwards browsers need old-style html stuff }
 
if($browser == "advanced") { $mime = "application/xhtml+xml"; } else { $mime = "text/html"; }
 
header("Content-Type: $mime; charset=$charset"); ?>
 
We definiëren hier een $charset en $browser variabele, omdat we die in een later stadium opnieuw zullen gebruiken, maar voor dit script op zich zijn ze niet nodig.

Interessante links:


 

 

print