2012-03-16 10 views
30

Hemos tenido un problema con el almacenamiento en caché de Chrome de un recurso en nuestro servidor de Glassfish. Los encabezados caducados y sin caché no se envían y el recurso (un archivo SWF de aproximadamente 4 MB) está siendo cacheado por Chrome, a pesar de la presencia del encabezado Last-Modified.¿Durante cuánto tiempo Google Chrome almacena en caché un recurso si caduca y/o no se establecen los encabezados de caché?

A veces, Chrome recibirá un código 304 y otras veces simplemente un 200 (desde el caché). Entiendo que el 304 - Es probable que Chrome esté revisando la fecha más reciente de Last-Modified con la versión en caché para decidir. Pero otras veces hace el 200 (del caché), que no devuelve ninguna información del encabezado y aparece que Chrome simplemente está asumiendo que el archivo no se ha modificado en lugar de verificar.

Google's own site states lo siguiente:

HTTP/S es compatible con el almacenamiento en caché local de los recursos estáticos por el navegador. Algunos de los navegadores más nuevos (por ejemplo, IE 7, Chrome) utilizan una heurística para decidir cuánto tiempo almacenar en caché todos los recursos que no tienen caché explícito encabezados.

Pero esto no proporciona una respuesta definitiva. ¿Está publicada esta heurística en algún lugar? Me doy cuenta de que puede no haber una respuesta fija (como 30 días), pero algunas pautas generales serían útiles. Además, si se está configurando Last-Modified, no entiendo por qué Chrome no se molesta en verificarlo primero.

+2

Se _es_ publicó en la medida en que la fuente de cromo es de libre disposición. – cdeszaq

+0

hola - ¿Encontraste más información sobre cómo se determina esta heurística? Si la lógica está basada en DEFAULT_CACHE_TIME ¿hay un URI de Chrome en el que se muestre esta configuración? – andrew

Respuesta

9

DEFAULT_CACHE_TIME = 300

me encontré con lo anterior mediante la búsqueda en http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk para "DEFAULT_CACHE_TIME".

Hay un archivo llamado "chromeextensionsdocs.py" que contiene el DEFAULT_CACHE_TIME.

I creo que esto es segundo basado en el ejemplo dado en http://code.google.com/appengine/docs/python/memcache/overview.html
En "chromeextensionsdocs.py", el DEFAULT_CACHE_TIME se envía como el último parámetro en memcache.add

no estoy totalmente seguro si esto es el valor correcto o no, pero parece probable que sea cuando se juntan las piezas.

+0

No tengo ningún conocimiento especial sobre este tema, aparte de leer algunos artículos en línea. 'DEFAULT_CACHE_TIME' podría ser el valor predeterminado para el caché de memoria, pero [supuestamente Chrome tiene varios cachés, uno de los cuales está basado en disco] (http://gent.ilcore.com/2011/02/chromes-10-caches.html) Me imagino que un archivo caducará en la memoria caché después de 5 minutos, pero potencialmente está en la memoria caché de disco por mucho más tiempo. [Este artículo] (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx) proporciona información sobre la forma en que IE9 determina cuándo se almacena el caché Los archivos sin pólizas caducan. –

+4

Unidad de "300" es el día? horas? segundos ? – Raptor

+0

Ver respuesta - "Creo que esto es segundos basado en ..." –

-1
+0

-1; hace referencia a un RFC oficialmente obsoleto en 2014 (como se muestra en la parte superior de la página vinculada), y no responde la pregunta de todos modos. –

2

La vez que el navegador considera una respuesta en caché fresco es por lo general en función de cuándo fue la última modificación:

Desde los servidores de origen no siempre proporcionan tiempos de expiración explícitas, una caché MAYO asignar un tiempo de expiración heurístico cuando no se especifica un tiempo explícito, empleando algoritmos que usan otros valores de campo de encabezado (como la hora de Última modificación) ... Si la respuesta tiene un campo de encabezado Last-Modified (Sección 2.2 de [RFC7232]), se recomienda que los cachés usen un valor de caducidad heurística que no sea más que una fracción del intervalo desde ese momento. Una configuración típica de esta fracción podría ser del 10%. [https://tools.ietf.org/html/rfc7234#section-4.2.2]

Los detalles de cómo Chrome (y otros navegadores) calculan dicho valor, se pueden encontrar en el código fuente (An example from Chrome v49). Parece que Chrome también calcula el valor relativo al encabezado Last-Modified.

(Credit to this post)

+0

¿Qué pasa si no hay un encabezado Last-Modified? – Phil

+0

Depende del navegador, creo. La muestra de código que anoté de Chrome recae en 'max_age_value' y expira el encabezado, creo ... – Jon

Cuestiones relacionadas