Mes impressions sur le web, les standards et autres…


Négociation de contenu avec les documents XHTML

Comme l’indique la note du W3C sur les types de média XHTML, les documents XHTML devraient être envoyés par le serveur avec l’en-tête application/xhtml+xml. Pour les documents dynamiquement générés par un script PHP par exemple, c’est facile la solution a déjà été rappellée sur plusieurs blogs :

if( !empty($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') )
{
    header('Content-Type: application/xhtml+xml; charset=iso-8859-15');
}
else
{
    header('Content-Type: text/html; charset=iso-8859-15');
}

Je n’ai rien vu en revanche en ce qui concerne les documents statiques, sauf une courte note à la fin de l’article The Road to XHTML 2.0: MIME Types de Mark Pilgrim. La solution donnée consiste à utiliser le module mod_rewrite d’Apache. Cependant, tout le monde ne dispose pas de ce module.

J’ajoute une autre possibilité : L’utilisation de la négociation de contenu avec l’option MultiViews d’Apache. Certes, cette option n’est pas non plus présente sur tous les serveurs, mais elle est, je pense, plus répandue que le module mod_rewrite. Cette option doit être activée dans le fichier httpd.conf pour votre domaine, ou ajoutée à l’aide d’un fichier .htaccess si cela est autorisé :

Options +MultiViews

Vous devez ensuite avoir un jeu de deux fichiers de même nom pour chacun de vos documents, le premier fichier ayant l’extension .xhtml et le second, l’extension .html. Apache se chargera d’effectuer l’envoi du bon fichier selon l’en-tête accept envoyé par le client. Le fichier devra être appellé dans le navigateur sans son extension. Exemple : http://domaine.tld/foo avec à la racine du domaine domaine.tld les fichiers foo.xhtml et foo.html (Si un seul fichier est présent, Apache l’enverra par défaut).

C’est la technique utilisée par le W3C pour certains de ses documents si j’en juge par le contenu de l’en-tête Content-Location renvoyé.

Vos réactions, opinions, insultes…

Rétroliens

Faire un rétrolien sur ce billet : [trackback]

Commentaires

Pas de commentaire actuellement

L’ajout de commentaires sur ce billet n’est pas/plus autorisé.