web-dev-qa-db-fra.com

Combien de temps Google Chrome cache-t-il une ressource si elle expire et / ou si les en-têtes sans cache ne sont pas définis?

Nous avons eu un problème avec Chrome mise en cache d'une ressource sur notre serveur Glassfish. Les en-têtes expirés et sans cache ne sont pas envoyés et la ressource (un fichier SWF d'environ 4 Mo) est mise en cache par Chrome - malgré la présence de l'en-tête Last-Modified.

Parfois Chrome obtiendra un code 304, et d'autres fois il fera simplement 200 (à partir du cache). Je comprends le 304 - Chrome vérifie probablement le date de dernière modification la plus récente avec la version mise en cache à décider. Mais d'autres fois, il fait le 200 (du cache), qui ne renvoie aucune information d'en-tête et semble que Chrome suppose simplement le fichier n'a pas été modifié au lieu de vérifier.

le propre site de Google indique ce qui suit:

HTTP/S prend en charge la mise en cache locale des ressources statiques par le navigateur. Certains des navigateurs les plus récents (par exemple IE 7, Chrome) utilisent une heuristique pour décider de la durée de mise en cache de toutes les ressources qui n'ont pas d'en-têtes de mise en cache explicites.

Mais cela ne fournit pas de réponse définitive. Cette heuristique est-elle publiée quelque part? Je me rends compte qu'il peut ne pas y avoir de réponse fixe (comme 30 jours), mais certaines directives générales seraient utiles. De plus, si Last-Modified est défini, je ne comprends pas pourquoi Chrome ne prend pas la peine de vérifier cela en premier.

39
sean

DEFAULT_CACHE_TIME = 300

J'ai trouvé ce qui précède en recherchant http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk pour "DEFAULT_CACHE_TIME".

Il existe un fichier appelé "chromeextensionsdocs.py" qui contient le DEFAULT_CACHE_TIME.

Je croyez ce sont des secondes basées sur l'exemple donné à http://code.google.com/appengine/docs/python/memcache/overview.html
Dans "chromeextensionsdocs.py", le DEFAULT_CACHE_TIME est envoyé comme dernier paramètre dans memcache.add

Je ne suis pas totalement sûr que ce soit la bonne valeur ou non, mais il semble probable que ce soit lors de la mise en place des pièces.

11
Zack Macomber

Le temps que le navigateur considère comme frais pour une réponse mise en cache est généralement relatif à sa dernière modification:

Étant donné que les serveurs d'origine ne fournissent pas toujours des temps d'expiration explicites, un cache PEUT attribuer un temps d'expiration heuristique quand un temps explicite n'est pas spécifié, en utilisant des algorithmes qui utilisent d'autres valeurs de champ d'en-tête (comme l'heure de la dernière modification) ... Si la réponse a un champ d'en-tête Last-Modified (Section 2.2 de [RFC7232]), les caches sont encouragés à utiliser une valeur d'expiration heuristique qui n'est pas plus qu'une fraction de l'intervalle depuis ce temps. Un réglage typique de cette fraction pourrait être de 10%. [ https://tools.ietf.org/html/rfc7234#section-4.2.2]

Les détails de la façon dont Chrome (et d'autres navigateurs) calculent cette valeur, peuvent être trouvés dans le code source ( n exemple de Chrome v49 ). Il semblerait que Chrome calcule également la valeur relative à l'en-tête Last-Modified).

( crédit à cet article )

9
Jon