Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
Par Laurent Denis, le 08 juillet 2005.
A l'heure où l'excellent François Palaci s'apprête à conférer aux Rencontres Mondiales du Logiciel Libre, dans la catégorie « Système de gestion de contenu » (CMS), sur un sujet préparé avec Elie Sloïm et moi-même, je retombe au détour d'un forum sur une question récurrente des utilisateurs de divers CMS :
« J'utilise le CMS X. Mes pages sont en XHTML1.0 Strict. Ma feuille de style, valide et tout, est ignorée par Firefox. Que se passe-t-il ? »
Ce petit problème, très spécifique et ponctuel, est en effet révélateur d'un pan entier de la qualité Web pour lequel les CMS ont un rôle clé à jouer. Encore faut-il qu'ils le prennent en compte.
De quoi s'agit-il, en effet ?
Firefox, en mode d'interprétation strict d'un document (X)HTML, exige que les feuilles de style externes lui soient servies avec le type de contenu unique qui convient, c'est à dire text/css.
Rappelons qu'ici, nous ne sommes pas du tout dans le code HTML ou CSS, mais dans les échanges client-serveur propres au protocole HTTP, qui précèdent et accompagnent tout affichage d'une page Web dans votre navigateur (et finalement, dans la conformité, et non plus dans la validité) :
Le navigateur : — Bonjour monsieur le serveur [...] Je voudrais la page foo.html, svp ?
Le serveur : — [...] La voilà.
Le navigateur : — [...] Bien reçu, merci. Mais je vois qu'il me faut aussi la feuille de style foo-style.css. Vous me l'envoyez, svp ?
Le serveur : — C'est parti.
Le navigateur : — Voyons voir cette feuille de style... Hé ! Un document application/schmilblik+brocolis ? Il se fiche de moi, lui. C'est pas une feuille de style, ça. Une feuille de style, c'est text/css, et rien d'autre... Zou : affichage du XHTML nu. Non mais.
Que s'est-il passé ?
Concrètement, les victimes de ce type de situation parviennent en général à forcer localement l'envoi d'un en-tête HTTP correct (Content-type: text/css; charset=...) en intervenant directement sur le script gérant la feuille de style, ou par le biais de la configuration du serveur.
Mais ce cas isolé est loin d'être le seul piège tendu par de nombreux CMS oublieux des en-têtes HTTP. Pour nous en tenir aux seules recommandations actuelles des bonnes pratiques qualités des services en ligne Opquast :
- Les entêtes envoyés par le serveur contiennent les informations relatives au jeu de caractères employé.
- Le serveur envoie les informations permettant la mise en cache des contenus.
- Le serveur envoie l'indication de la langue principale du contenu.
- Si le site est disponible en plusieurs langues, le serveur envoie la page dans la langue demandée par l'outil de consultation, si elle existe.
- Le serveur envoie les informations relatives à la nature des contenus (présence ou absence de contenus à caractère sexuel, violent, etc).
La gestion des types de contenu des feuilles de style, des documents XHTML, etc. pourrait d'ailleurs être l'objet de nouvelles bonnes pratiques Opquast...
Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.
Commentaires
e-t172, le 08 juillet 2005
Heuh, tes 5 derniers liens sont morts.
Sébastien Guillon, le 08 juillet 2005
Je ne comprends pas bien comment un CMS, du genre WordPress par exemple, modifie les en-têtes HTTP.
C'est le serveur qui dit quel type de fichier (extension) avec quel type MIME, non ?
À moins qu'il ne s'agisse de l'attribut type de l'élément link qui serait omis lors de l'ajout des feuilles de styles (dans ce cas le document n'est plus valide) ? Je ne pense pas que les CMS aillent jusqu'à générer (avec PHP par exemple) des en-têtes bidons...
As-tu un exemple de CMS qui produit ce genre d'erreur ?
Laurent Denis, le 08 juillet 2005
Merci e-t172, c'est corrigé
Sébastien : certains cms utilisent leurs propres extensions pour des feuilles de styles par exemple. J'ai vu le cas CSS en text/plain se produit par exemple avec Infoglue, ainsi (mais plus curieusement) qu'avec SPIP
La gestion des langues et de la nature des contenus est par ailleurs à peu près ignorée systématiquement.
Johann, le 08 juillet 2005
Tout dépend si la CSS est bien stockée dans un fichier statique en .css
Si tout est, par exemple, dans la base de données et restitué par PHP, alors c'est à PHP, et non à Apache, d'envoyer le type MIME.
Et le type MIME par défaut de PHP est text/html.
YoGi, le 08 juillet 2005
La CSS peut très bien être générée dynamiquement, et être un fichier php, jsp ou tout ce que tu veux. Et là, le type MIME par défaut ne sera pas text/css.
Sébastien Guillon, le 08 juillet 2005
Merci à tous d'éclairer ma lanterne !
Dans le cas de PHP c'est donc une erreur très facile à corriger. Soit en envoyant le bon Content-Type, soit en générant des fichiers .css...
Raphael, le 08 juillet 2005
"A l'heure où l'excellent François Palacci s'apprête à conférer aux Rencontres Mondiales du Logiciel Libre"

-> Pour y avoir assisté, c'était un très bon moment. J'en attend les powerpoint avec impatience
Laurent Denis, le 08 juillet 2005
Raphaël : pour la mise en ligne de la conférence, on a prévu de vous faire un petit peu plus que les seuls slides...
Frédéric, le 09 juillet 2005
Pour SPIP, c'est corrigé dans la 1.8 il me semble.
Raphael, le 10 juillet 2005
" pour la mise en ligne de la conférence, on a prévu de vous faire un petit peu plus que les seuls slides..."
--> tu nous communiqueras l'adresse stp ? (sorry pour le mini-hors sujet)
Laurent Denis, le 10 juillet 2005
ce sera sur Openweb, puisque c'était une intervention "OpenWeb".
<mode="redac-chef">Et que c'est en toutes lettres sur le programme des publications que tu connais. Enfin, que tu es supposé consulter chaque matin au lever, avant même de te brosser les dents, petit padawan. Non Mais ;)</mode>
Yannick Pavard, le 31 juillet 2005
Bonjour,
dans le thème CMS bien sur 

Pour ceux qui cherchent la conférence de François, c'est par ici : blog.palaci.fr/2005/07/13...
Sinon pour ceux qui se lanceraient dans une analyse de cms et d'accessibilité je leur dit BRAVO. Je les invite même à venir l'an prochain aux rmll2006 pour venir en parler
Nancy - rmll2006
Ivan, le 02 octobre 2005
Hello,
Dans le cas d'un site web statique super simple, et d'un serveur web qui me renvoie text/plain pour la css externe alors que je souhaite text/css, que signifie "forcer localement l'envoi d'un entête http correct" ?
Je tente l'ajout de la META :
<META http-equiv="Content-Style-Type" content="text/css">
sans être sûr que ça soit utile.
J'ai lu aussi de la doc sur la fonction header() en php mais je suis débutant en php.
Quel est donc le meilleur moyen local (et magique) pour que ma pauvre css soit chargée sous Firefox ? (sachant que je n'ai pas accès à la config du serveur).
Merci de vos lumières :o)
Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.