web-dev-qa-db-fra.com

Quand utiliser et ne pas utiliser les ETags

Je regardais notre site sur WebPageTest.org et l'une de leurs recommandations pour accélérer un site Web est la suivante:

Les en-têtes ETag ne doivent généralement pas être utilisés à moins que vous n'ayez une raison explicite d'en avoir besoin

Je me demandais ce que cela voulait dire. Cela signifie-t-il que le contenu statique que vous savez ne changera pas ne devrait pas en avoir, ou que le contenu que vous savez changera régulièrement ne devrait pas en avoir, ou signifie-t-il que vous ne devriez pas les utiliser généralement sauf si vous avez un besoin spécifique.

Si c'est le dernier cas, quel est le bon moment pour les utiliser? Merci pour toute aide.

9
Django Reinhardt

Les ETags sont une alternative à (mais peuvent être utilisés en combinaison avec) "Last-Modified-Time" afin de déterminer la validation du cache.

Le client peut envoyer une condition préalable telle que if-matches ou if-no-correspond en fonction de l'ETag. Ce n'est pas juste pour les requêtes GET (c'est ce que fait webpagetest.org), vous pouvez utiliser une "mise à jour opportuniste" de sorte qu'une requête PUT ait une condition préalable et n'effectue pas l'opération de mise à jour si la ressource a été mise à jour depuis l'ETag Dernière acquisition.

En termes simples: vous appuyez sur modifier sur une page de votre CMS, votre ami appuie sur modifier sur une page de votre CMS, votre ami procède à leur édition et sauvegarde les hits et enfin vous cliquez sur Save - sans l'en-tête HTTP ETag ou Content-MD5 HTTP dont vous auriez besoin pour réinventer la roue afin d'éviter les problèmes (par exemple, d'effacer les modifications apportées à vos amis), la solution fait déjà partie du protocole HTTP et il est donc logique de l'utiliser.

En général, je suis d’accord avec AOL (qui gère webpagetest.org) sur leur conseil "taille unique" - il est préférable de ne pas encombrer les en-têtes HTTP avec des chaînes cryptées (les balises ETags ne sont généralement ni jolies ni lisibles par un humain) lorsqu’une seconde de différence ( que Last-Modified-Time peut détecter) fera pour le travail en cours.

Si une page est mise à jour plusieurs fois par seconde et que vous avez absolument besoin de l'affichage de la dernière version la plus précise, vous pouvez expérimenter des solutions autres que HTTP GET ou simplement utiliser ETags.

Veillez à ce que vos ETags n'incluent pas d'informations par système de fichiers, de configuration de serveur, etc. (telles que les inodes qui sont par défaut sur Apache), sinon vous aurez des problèmes lorsqu'il y a deux serveurs (les ETags de chacun ne correspondront pas).

8
Metalshark

Pour paraphraser Coding Horror excellent évaluation du plugin YSlow Firebug (que WebPageTest.org utilise apparemment comme base pour leur évaluation):

"Yahoo est l’un des sites les plus fréquentés au monde. Ses problèmes sont probablement not vos problèmes."

Si vous ne traitez pas chaque jour des millions de personnes uniques sur votre réseau à charge équilibrée, il est fort probable que les suggestions fournies soient not tous les bons choix lors de l'optimisation de votre site.

7
danlefree