365 votes

ETag vs en-Tête Expires

J'ai regardé mais je n'ai pas été en mesure de comprendre si je dois utiliser à la fois un ETag et un en-Tête Expires ou de l'un ou de l'autre.

Ce que j'essaie de faire est de vous assurer que mes fichiers flash (et d'autres images, et ce, non seulement pour obtenir mis à jour lors de tout changement à ces fichiers.

Je ne veux pas faire quelque chose de spécial comme changer le nom du fichier ou mettre un peu bizarre caractères sur la fin de l'url à faire pas mise en cache.

Aussi, est-il quelque chose que je dois faire par programmation sur ma fin dans mes scripts PHP, à l'appui de cette ou s'agit-il d'Apache?

689voto

Marc Novakowski Points 22611

Ils sont légèrement différents - l'ETag n'avons pas toutes les informations que le client peut utiliser pour déterminer si ou de ne pas faire une demande pour que le fichier de nouveau dans l'avenir. Si ETag est tout ce qu'il a, il faudra toujours faire une demande. Toutefois, lorsque le serveur lit le ETag de la demande du client, il peut alors décider d'envoyer le fichier (HTTP 200) ou de dire au client d'utiliser seulement leur copie locale (HTTP 304). Un ETag est fondamentalement juste une somme de contrôle d'un fichier sémantiquement changements lorsque le contenu de la modification du fichier.

L'en-tête Expires est utilisé par le client (et les mandataires/caches) afin de déterminer si oui ou non il doit même faire une demande pour le serveur. Le plus vous êtes proche de l'Expiration de la date, plus il est probable que le client (ou proxy), fera une requête HTTP pour ce fichier à partir du serveur.

Alors, vraiment ce que vous voulez faire est d'utiliser les DEUX en-têtes - définir l'en-tête Expires à une valeur raisonnable basé sur la façon dont souvent les changements de contenu. Puis configurer les ETags à être envoyé, de sorte que lorsque les clients NE envoyer une requête au serveur, il peut plus facilement déterminer si ou de ne pas envoyer le fichier.

Une dernière remarque à propos de l'ETag - si vous utilisez une charge équilibrée à l'installation du serveur avec plusieurs ordinateurs exécutant Apache, vous voudrez probablement désactiver ETag génération. C'est parce que les inodes sont utilisés dans le cadre de l'ETag algorithme de hachage qui sera différente entre les serveurs. Vous pouvez configurer Apache de ne pas utiliser les inodes dans le cadre du calcul mais alors, vous voulez vous assurer que la date et l'heure sur les fichiers sont exactement les mêmes, pour assurer le même ETag est généré pour tous les serveurs.

115voto

john Points 444

Etag et de Dernière modification des en-têtes sont les validateurs.

Ils permettent à votre navigateur de comprendre si un fichier de la page a changé, même si elle conserve le même nom.

Expires et Cache-control sont de donner à l'actualisation de l'information.

Cela signifie qu'ils informent, le navigateur et l'inverse dans l'entre-deux procurations, jusqu'à quel moment et pour combien de temps, ils peuvent garder la page/fichier lors de leur cache.

Donc, la question qui est généralement un validateur à utiliser, etag ou de dernière modification, et qui d'actualisation des informations d'en-tête à utiliser, expire ou cache-control.

37voto

hienbt88 Points 129

Expires et Cache-Control sont "forts de la mise en cache des en-têtes"

Last-Modified et ETag sont "la faiblesse de la mise en cache des en-têtes"

D'abord le contrôle de navigateur Expires/Cache-Control afin de déterminer si ou de ne pas faire une requête vers le serveur

Si vous avez pour faire une demande, il enverra Last-Modified/ETag dans la requête HTTP. Si l' Etag de la valeur du document correspond, le serveur enverra un code 304 au lieu de 200, et aucun contenu. Le navigateur va charger le contenu de son cache.

18voto

David Z Points 49476

Par défaut, Apache va générer un Etag basé sur le numéro d'inode du fichier, date de dernière modification, et de taille, qui doit être parfaitement bien à faire ce que vous voulez. Je pense que ça va générer par défaut de Dernière modification de l'en-tête basé sur la date de dernière modification du fichier sur le disque, ce qui est aussi parfaitement bien à faire ce que vous voulez.

Vous devriez également avoir Apache envoyer un en-tête Expires daté d'un an dans le futur (selon http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21) afin que les navigateurs en connaître le contenu est mis en cache. Jetez un oeil à mod_expires de le configurer.

13voto

Benjamin Piette Points 410

Un autre résumé:

Vous devez utiliser à la fois. ETags sont un "côté serveur" de l'information. Expire y a un "côté Client" mise en cache.

  • Utiliser les ETags sauf si vous avez une charge équilibrée serveur. Ils sont sûrs et laisser les clients savent qu'ils doivent obtenir de nouvelles versions de vos fichiers de serveur à chaque fois que vous modifiez quelque chose de votre côté.

  • L'expiration doit être utilisé avec prudence, comme si vous définissez une date d'expiration loin dans le futur mais que vous voulez modifier un des fichiers voit tout de suite (un fichier JS par exemple), certains utilisateurs ne peuvent pas obtenir la version modifiée jusqu'à ce qu'un long temps!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X