Comment configurer Apache 2.2.3 pour envoyer «dernière modification», etc.

9

et dire au navigateur de recharger un objet (et / ou une page ... tout sur le site) uniquement s'il a été modifié depuis la dernière visite ??? htaccess, httpd.conf ... avez-vous une directive prête pour mon cas? Merci beaucoup

smepie
la source

Réponses:

5

Notez que les Last-Modifieden - têtes sont des en-têtes de cache faibles. La préférence actuelle est d'utiliser des en- Cache-Controltêtes.

Google a un bon article à ce sujet.

Optimiser la mise en cache

Expire et Cache-Control: max-age. Ceux-ci spécifient la «durée de vie d'actualisation» d'une ressource, c'est-à-dire la période pendant laquelle le navigateur peut utiliser la ressource mise en cache sans vérifier si une nouvelle version est disponible à partir du serveur Web. Ce sont des «en-têtes de mise en cache puissants» qui s'appliquent sans condition; c'est-à-dire, une fois qu'ils sont définis et que la ressource est téléchargée, le navigateur n'émettra aucune demande GET pour la ressource jusqu'à ce que la date d'expiration ou l'âge maximum soit atteint.

Dernière modification et ETag. Ceux-ci spécifient certaines caractéristiques de la ressource que le navigateur vérifie pour déterminer si les fichiers sont identiques. Dans l'en-tête Last-Modified, il s'agit toujours d'une date. Dans l'en-tête ETag, il peut s'agir de n'importe quelle valeur qui identifie de manière unique une ressource (les versions de fichier ou les hachages de contenu sont typiques). Last-Modified est un en-tête de mise en cache "faible" dans la mesure où le navigateur applique une heuristique pour déterminer s'il faut récupérer l'élément du cache ou non. (Les heuristiques diffèrent selon les différents navigateurs.) Cependant, ces en-têtes permettent au navigateur de mettre à jour efficacement ses ressources mises en cache en émettant des requêtes GET conditionnelles lorsque l'utilisateur recharge explicitement la page. Les GET conditionnels ne renvoient pas la réponse complète sauf si la ressource a changé sur le serveur, et ont donc une latence inférieure à celle des GET complets.

Je recommande d'utiliser l'un Cache-Controlou les en- Expirestêtes selon les besoins, car ce sont des en-têtes de cache puissants. Certains systèmes ignoreront les dates de dernière modification.

Vous pouvez ensuite utiliser un outil comme curlou http://redbot.org pour vérifier les en-têtes.

jeffatrackaid
la source
2
FWIW: "faible" est quelque chose que Google a inventé. Expiresest un en-tête totalement inapproprié pour les ressources qui n'expirent pas. Certaines ressources peuvent être modifiées, mais pas à une certaine date d'expiration. Le point de Google est qu'il Last-Modifiednécessite un GET conditionnel, alors qu'il Expirespermet au cache du navigateur d'ignorer complètement le GET.
Dancrumb
1
Le terme faible est simplement sémantique. Le fait est que l'utilisation d'en- Last-Modifiedtêtes en l'absence d'autres instructions de mise en cache laisse la période de cache au client HTTP. Si une ressource n'a pas été modifiée depuis la Last-Modifieddate, la ressource doit être considérée comme fraîche. En revanche, lorsque vous utilisez un Expiresou un en - Cache-Controltête, l'origine peut définir une période de fraîcheur explicite.
jeffatrackaid
1
"faible" v "fort" est défini sur tools.ietf.org/html/rfc7232#section-2.1 (Remarque également pour @Dancrumb)
John Bentley