Comment configurer ETag avec le cache du navigateur
J'ai de l'installation d'un cache de votre navigateur pour un site statique via le .htaccess
fichier en paramètre:
# BROWER CACHING - 1 Day for images
<filesMatch ".(jpg|jpeg|gif|ico)$">
Header set Cache-Control "max-age=86400, public"
</filesMatch>
Je suis très bien avec ces images ayant un 1 jour de cache, mais le site change fréquemment et donc je ne veux pas mettre en cache les les fichiers CSS et JS.
J'ai lu sur ETag, qui, comme je vous comprends, vous permet de mettre en cache un fichier, mais aussi l'ensemble de sa date de création, si elle est mise à jour la prochaine fois qu'un client visite le site, il vérifie si la date de création correspond à.
- Ai-je bien compris ETag correctement?
- Comment puis-je le configurer? J'ai regardé autour, mais ne pouvais pas trouver toutes les informations sur sa configuration.
OriginalL'auteur sam | 2016-05-16
Vous devez vous connecter pour publier un commentaire.
Vous utilisez soit
FileETag MTime Size
ouHeader unset Etag
etFileEtag none
. Ne pas utiliser les deux (Créer ETag et Supprimer ETag) et ne choisissez celui qui fonctionne le mieux sur votre serveur particulier.ou
OriginalL'auteur Ed-AITpro
ETAG n'est pas l'attribut le plus important. Le principal attribut que vous êtes absent est expire. Je suis à 100% sûr, cache du navigateur fonctionne sans etag. Vérifiez la configuration sur http://pisrs.si. Comment vérifier? Frapper la touche F12 dans le navigateur, allez dans l'onglet réseau, voir comment les ressources sont extraites, de comparer à votre site. Localhost ressources sont mises en cache de manière différente. Vérifiez votre navigateur infos à ce sujet.
Ci-dessous est de travail de configuration de domaine principal, qui est de travail. Assurez-vous que vous disposez de tous les mods activés.
OriginalL'auteur Mitja Gustin
ETags sont juste un unique opaque balise, on ne peut pas comparer entre eux, sauf pour l'égalité, donc si vous avez 2 ETags pour la même ressource (par exemple, URI), vous ne pouvez pas dire qui ressource la plus récente. Pour cela, vous avez besoin de la Dernière modification de l'en-tête.
Même la Dernière modification de l'en-tête est problématique, car il ne dispose que d'une résolution jusqu'à 1s, et fortement modifiées sites (comme les blogs), il est tout à fait possible pour une cache d'avoir plusieurs représentations d'un fichier avec des ETags et même de Dernière modification de la valeur. C'est une honte qu'ils n'ont pas jugé opportun de faire ETags de façon monotone incrémentation afin qu'ils puissent être comparés.
ETag est utilisé dans les requêtes conditionnelles avec Si-None-Match de l'en-tête pour les Obtient et Si-le Match pour la METTRE, et dans le premier cas, le serveur doit renvoyer le corps uniquement si aucun des ETag(s) fourni avec les ETag pour la ressource (il a changé), et dans le second cas (pour METTRE ou PATCH) que si elle ne correspond pas à vous travaillez donc sur la version correcte.
Les deux ETag et de Dernière modification sont cache validateur en-têtes. La plupart des avantages de la mise en cache est concerné par le concept de fraîcheur. Les validateurs vous permettront de vérifier si la version que vous avez est toujours valide, mais qui nécessite encore de faire une demande au serveur. Tout ce que vous pouvez enregistrer est la charge utile de transfert, et pour beaucoup de choses aujourd'hui, c'est juste pas la peine.
Fraîcheur, d'autre part (en-tête Expires ou max-age Cache-Control directive) permet au client d'éviter de re-validation si la version qu'ils ont déjà encore frais (n'a pas expiré). Qui sauve de la connexion au serveur pour vérifier, et donc permet d'économiser beaucoup de temps de chargement de la page.
OriginalL'auteur Adrien
HTTP a plusieurs les fonctionnalités liées à la mise en cache et ils s'appliquent à la fois à l'agent utilisateur (navigateur) et de cache de proxy caches (si transparent, ou pas; par exemple, le proxy dans le réseau du client ou d'un serveur proxy inverse assis juste à côté serveur). Ces fonctionnalités sont disponibles en deux groupes: d'expiration (peut empêcher demande entièrement) et validation (peut empêcher le transfert de données).
Balise d'entité (
ETag
) est l'une de ces caractéristiques et appartient au groupe de validation. L'autre dans ce groupe est la date de dernière modification (Last-Modified
). Balise d'entité permet l'invalidation du cache en raison de la modification de contenu au lieu de la plus récente date de dernière modification. Lire plus sur comment balise d'entité fonctionne sur Wikipédia. En bref, l'utilisation typique est:Le serveur ajoute
ETag
en-tête pour une réponse contenant une ressource d'être servi.Le client met en cache les ressources et se souvient de sa balise d'entité (la valeur de
ETag
).Prochaine fois que le client a besoin de la ressource, il demande à partir du serveur conditionnellement. Dans la demande, il comprend
If-None-Match
d'en-tête contenant la balise d'entité.Si la ressource a changé (la balise d'entité dans
If-None-Match
est considéré comme obsolète par le serveur), le serveur envoie une réponse contenant la version actuelle de la ressource (et la nouvelle balise d'entité), sinon ça ne répond avec304 Not Modified
et ne prend pas la peine d'envoyer à la ressource.Pour les fichiers statiques (ni créé dynamiquement par un script CGI ou alors, à chaque requête), Apache peut être configuré pour générer
ETag
viaFileETag
directive. Par défaut, sans vous apporter des modifications à la configuration, Apache va générerETag
et sa valeur sera basé sur le fichier de la dernière modification (mtime) et la taille de Apache 2.4. Dans Apache 2.3.14, la valeur par défaut utilisée pour inclure le numéro d'inode du fichier.Si le fichier est servi de façon dynamique, Apache ne peut pas générer le
ETag
, car il ne connaît pas les détails de la façon dont la ressource à être mis en cache est généré. C'est le script pour définirETag
de façon appropriée et à gérer lesIf-None-Match
. E. g. dans mod_perl, leIf-None-Match
partie peut être manipulé à l'aide de Apache2::Request::meets_conditions, qui met en œuvre la manipulation de HTTP/1.1 requêtes conditionnelles en général.Si vous voulez compter uniquement sur l'en-tête ETag, vous devez désactiver les autres fonctions de validation et la date d'expiration du mécanisme. Ensemble
Cache-Control: max-age=0, must-revalidate
etExpires: 0
pour forcer la validation des entrées de cache (c'est à dire toujours faire une demande). Vous pouvez également supprimer leLast-Modified
en-tête à partir des réponses, mais HTTP/1.1 conseille que, en général.Pour la comparaison de
Last-Modified
etETag
, voir:Noter que
Last-Modified
est vu comme HTTP/1.0 fonctionnalité de compatibilité.ETag
peut contenir la même valeur et la même (sauf à l'aide d'If-None-Match
au lieu deIf-Modified-Since
).Comme une note de côté, je tiens à ajouter que la proposition d'une norme RFC 7232 existe et est en relation avec les détails de l'entité balises et les requêtes conditionnelles. Voir l'annexe A pour les modifications qu'il introduit à partir de l'adresse HTTP/1.1.
OriginalL'auteur Palec