Bonsoir à tous,

on voit souvent dans un fichier html ou php :

<head>
<meta charset="utf-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->


mais on trouve aussi dans .htaccess :

AddDefaultCharset utf-8

et

<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=edge"


Ma question : doit-on mettre ces déclarations à la fois dans le fichier html/ php + htaccess ou une seule déclaration dans l'un ou l'autre fichier suffit ? Quelle est la meilleure pratique ?
Modifié par Newzic (18 Mar 2014 - 23:28)
Bonjour,

Il y a plusieurs méthodes différentes : soit dans le html soit dans le .htaccess. La meilleures méthode est celle via .htaccess (pas d'erreur sous validateur W3C).

Utilisez celle recommandée par HTML5 Boilerplate. Donc en fait, celle que vous indiquiez en dernier... avec quelques ajouts :
<IfModule mod_headers.c>
    Header set X-UA-Compatible "IE=edge"
    # `mod_headers` cannot match based on the content-type, however, this
    # header should be send only for HTML pages and not for the other resources
    <FilesMatch "\.(appcache|atom|crx|css|cur|eot|f4[abpv]|flv|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|tt[cf]|vcf|vtt|webapp|web[mp]|woff|xml|xpi)$">
        Header unset X-UA-Compatible
    </FilesMatch>
</IfModule>


Edit : désolé pour la corruption du code. C'est dû à son passage la moulinette par un script du forum...
Modifié par Olivier C (19 Mar 2014 - 07:39)
C'est justement le problème que j'ai avec html5boilerplate : les 2 déclarations que je mentionne (meta charset="utf-8" et X-UA-Compatible->edge) sont à dans le fichier htaccess mais aussi dans le fichier index.html sur la version téléchargeable (4.3.0) sur html5boilerplate.com. Je constate la même chose avec le projet initializr.
Pour le charset, on recommande de l'envoyer autant en tant qu'en-tête HTTP qu'en tant que balise meta. Par contre il faut savoir que l'en-tête HTTP a toujours le dessus, au cas où ils ne seraient pas pareils.

Pour l'autre élément je ne peux pas me prononcer, je ne sais pas à quoi il sert.
Modérateur
En fait il faut les 2!
Prenons l'encodage:

Pourquoi l'en-tête?

C'est beaucoup plus propre de dire comment le navigateur doit lire le document, avant qu'il ne le lise, que de le laisser lire le document à l'aveugle pour découvrir comment le lire. Pour éviter les problèmes on place en premier lieu la balise meta.

Pourquoi la balise meta?

Pour que le fichier HTML reste cohérent et continue à garder l'information. Si j'enregistre la page HTML sur mon disque, je n'aurai plus d'en-tête par exemple.

De plus, avoir les deux peut résoudre des problèmes avec des user-agents ne comprenant pas l'un ou l'autre.