Testez les performances de votre site

 
Catégories du blog

Configurer les ETags sur Apache et IIS

Le vendredi 16 avril 2010 dans Performances web et Tutoriel - 11 commentaires

Dans la majorité des cas, il est préférable de désactiver l'utilisation des ETags sur votre serveur. Cela permet au navigateur d'utiliser le système habituel de mise en cache et de diminuer la bande passante utilisée inutilement

Comprendre les Entity Tags (ETags)

Les ETags sont utilisés pour pouvoir différencier deux versions d'un même document. C'est un identifiant de la forme "65df7x89-cva-d612sd99", unique pour une URL, qui est transmis entre le navigateur et le serveur dans les requêtes HTTP.

L'intérêt de cet ETag est que le navigateur peut demander au serveur si un document a été modifié en envoyant une requête de ce type :

If-None-Match: "65df7x89-cva-d612sd99"

Si le document n'a pas été modifié, le serveur répond avec "304 Not Modified" et le navigateur utilisera son cache pour afficher le document. Autrement, le document est téléchargé à nouveau par le navigateur.

Contraste entre théorie et mise en pratique

Le fonctionnement des ETags n'a, en soi, pas de problèmes particulier. Il est géré par la plupart des navigateurs et des serveurs. Dans le cas où ce système n'est pas pris en charge, c'est le mécanisme basique de mise en cache qui est utilisé.

La raison d'une mauvaise utilisation des ETags vient de la manière dont sont générés les identifiants associés aux versions d'un document. Pour Apache, celui-ci est basé, par défaut, sur l'inode et la date de dernière modification du document. Si votre site web est géré sur un cluster de plusieurs serveurs, l'ETag pourra être différent pour une même version d'un document.

Lorsque l'ETag est différent pour une même version, le navigateur télécharge le document à nouveau, induisant une utilisation inutile de la bande passante

L'équipe de Yahoo! dédiée à la recherche sur les performances en a conclu qu'il est préférable de simplement désactiver l'utilisation des ETags et de revenir au mécanisme basique de mise en cache

Désactiver les ETags sur Apache

Ajoutez cette directive à votre fichier .htaccess ou, encore mieux, à votre fichier de configuration httpd.conf :

Header unset ETag
FileETag None

Ces instructions désactivent l'envoi de l'identifiant ETag dans la réponse HTTP du serveur (Header) et annulent la génération des ETags pour chaque version d'un document (FileETag)

Désactiver les ETags sous IIS 6

Dans la console de gestion des services IIS, ouvrez les propriétés de votre site web en cliquant droit sur le dossier racine. Rendez-vous dans l'onglet En-têtes HTTP et cliquez sur le bouton Ajouter dans les En-têtes HTTP personnalisés. Ajoutez "ETag" dans le nom de l'entête et laissez le champ valeur à vide.

Désactiver les ETags sous IIS 7

Il n'est pas possible de supprimer simplement les ETags dans IIS 7, il est seulement possible de modifier la valeur renvoyée en ajoutant un en-tête personalisé (comme pour IIS 6) mais cela ne résoud pas le problème. Espèrons que Microsoft résoudra ce manque avec un patch sur IIS 7!

jeudi 17 juin 2010 à 09h49 La désactivation entraine-t-elle de réels gains de performance ? Y a-t-il une taille mini des fichiers pour que cela soit intéressant ?

vendredi 18 juin 2010 à 20h49 La désactivation des ETags permet un gain de performance, mais ce n'est pas cette optimisation seule qui vous permettra de diminuer efficacement vos temps de réponse. Il faut la considérer comme une étape de plus vers un site performant!

Si vous gardez les ETags mal configurés et que votre site a besoin de composants lourds, le cache du navigateur les gérera d'une mauvaise manière (quelque soit la taille des fichiers) et les téléchargera sans réel besoin: donc consommation de bande passante et utilisation de connexions qui pourraient servir à d'autres composants...

Zedbar
Zedbar

lundi 08 novembre 2010 à 13h40 Salut à tous,

J'ai lu avec attention ton tutorial et pour le novice que je suis en ce domaine ; configurer les Etags vient en fait en opposition avec les CDN (multiples serveurs), c'est bien cela ?

Pour essayer d'optimiser mon site, j'utilise YSlow qui me dit (pour faire simple) "d'améliorer" les CDN et les Etags. Du coup lequel doit-on privilégier ?

Merci de vos lumières.

Zedbar

lundi 08 novembre 2010 à 16h32 Les deux optimisations ne sont pas en opposition. Un CDN correspond à un réseau de serveurs qui délivrent des ressources statiques et sont théoriquement plus proches géographiquement pour réduire la latence.

Le problème avec les Etags, c'est qu'ils peuvent varier pour une même ressource sur plusieurs serveurs différents (et donc perdre de leur intérêt).

Le plus simple, dans le cas où vous utilisez ou non un CDN sur votre site, est de désactiver les Etags. Cela permettra au navigateur de basculer sur le mécanisme basique de mise en cache.

J'espère avoir répondu à vos attentes, n'hésitez pas si vous avez d'autres questions...

samedi 08 janvier 2011 à 09h16 merci pour cet article, très intéressant et bien expliqué

mardi 06 mars 2012 à 17h25 merci, pour ces explications.
j'ai mis en place ce code sur mon site, aucun probleme !

Patrick
Patrick

samedi 06 juillet 2013 à 12h43 Bonjour,

Je trouve cet article très intéressant, tellement que j'ai ajouter les 2 lignes dans mon htaccess, mais malheureusement cela me génère une erreur 500, site planté.

Dommage,
Patrick

lundi 08 juillet 2013 à 08h50 Patrick,

Si vous avez une erreur avec ces lignes, c'est surement parce que le module headers d'Apache n'est pas activé sur votre configuration.
Selon votre version, vous pouvez le faire facilement avec la commande : a2enmod headers . Pensez à bien redémarrer apache pour prendre en compte les modifications.

samedi 05 décembre 2015 à 09h51 Bonjour et merci pour le partage de vos connaissances. Ma question : tous ces réglages serveurs sont-ils possibles pour des sites hébergés chez Orange ou Free (serveurs mutualistes) ? Il ne me reste plus que ces réglages pour avoir 100 % sur PageSpeed et YSlow... Merci.

dimanche 06 décembre 2015 à 16h28 Bonjour Luc,

Ces réglages sont possibles si l'hébergeur autorise l'utilisation d'un fichier .htaccess.
Je vous conseille de faire des tests et de regarder les entêtes des requêtes HTTP pour voir si les instructions sont prises en compte ou non.

lundi 25 juillet 2016 à 11h07 Bonjour

je ne comprends pas pourquoi alors les outils comme PageSpeed ou Yslow recommandent de spécifier un Last-Modified ou ETag header pour activer la validation de cache.

Par ailleurs je ne comprends pas non plus pourquoi apres FileETag MTime Size dans le .htaccess PageSpeed me reclame toujours l'activation !!

Il manque quelque chose ?

merci

cyril

Ajoutez un commentaire :
Anti spam