una navegadores navegador los leer forzar evitar caché cache application aplicación aplicaciones almacenamiento actualizar html5 offline offline-mode application-cache

navegadores - html5 application cache



Forzar applicationCache para volver a cargar los archivos en caché (5)

"tendrá que cambiar el archivo de manifiesto de la memoria caché. Esto puede ser tan simple como cambiar un solo carácter".

Estoy usando HTML5 ApplicationCache para almacenar muchos archivos de Javascript, CSS, imagen, etc. para una página. Si actualizo uno de esos archivos, el navegador nunca lo vuelve a cargar. He probado lo siguiente:

  • Llamando a applicationCache.update () en la carga de la página
  • Escuchando el evento de actualización de applicationCache, y llamando a swapCache () y window.location.reload ()
  • Agregar un comentario de marca de tiempo al propio archivo de manifiesto para forzar al navegador a darse cuenta de que el manifiesto ha cambiado

Seguramente esto no puede ser tan difícil. ¿Cómo convenzo al navegador para que vuelva a solicitar un archivo en caché?


Con Google Chrome, si solo haces esto mientras depuras, hay una solución simple: usa una ventana de incógnito. Cuando cambie algo en su caché, cierre la ventana de incógnito (si tiene más de una, asegúrese de cerrarlas todas), vuelva a abrirla y vaya a su aplicación. Esto ahora se descargará desde limpio, incluidos todos los archivos modificados.

Es una opción ligeramente nuclear, ya que destruirá todos los datos almacenados, pero funciona bien para mí durante el proceso de ordenación de CSS, por ejemplo.

Por alguna razón, el borrado de la memoria caché de la página de Chrome con "Borrar datos de navegación" no parece funcionar.


Luché con esto por un tiempo. Para mí, la clave fue obtener el tipo mime y los encabezados de almacenamiento en caché directamente a través de nginx.

en /etc/nginx/mime.types:

text/cache-manifest manifest appcache;

en /etc/nginx/nginx.conf:

# If the file exists as a static file serve it directly if (-f $request_filename) { expires -1; break; }

La línea expira -1 hace que el encabezado de la memoria caché se establezca en no-cache.

Además, para borrar el caché en Firefox 23 utilicé:

  • Firefox-> Opciones-> Opciones-> Avanzado-> Red: Web sin conexión, etc.-> Borrar ahora

Y para ver lo que se estaba buscando desde el servidor o no:

  • Firefox-> Opciones Web-> Herramientas-> pestaña Red

para su archivo manifiesto establezca su encabezado HTTP para

''Cache-Control'' to ''no-store''

agregar un tipo de contenido para .manifest de

''text/cache-manifest''

Eso debería hacerlo, de lo contrario, el navegador almacenará en caché el manifiesto para el valor predeterminado de caché que haya configurado, por lo que las solicitudes para verificar el manifiesto recuperarán una copia en caché.

Después de eso, luego cambie un carácter en el archivo de manifiesto y la siguiente solicitud debería buscar un nuevo manifiesto.

No dice qué servidor está ejecutando, pero hice esto para los archivos alojados en un compartimiento de S3 y, al hacerlo, el S3 normalmente se almacena en caché durante 24 horas.


Para forzar la descarga de cualquier archivo nuevo (o modificado), debe actualizar el archivo de manifiesto (agregue un comentario de número de versión o cualquier cambio será suficiente). Lo que probablemente está sucediendo es que estás recibiendo un error. La más común es que podría no estar sirviendo el manifiesto con el tipo de mime correcto ( text/cache-manifest ). ¿Configuró su servidor correctamente? La forma más fácil de comprobarlo es abrir la página en Chrome y buscar en la consola y en la pestaña de recursos en AppCache para ver si hay un error (se quejará de que el archivo se está sirviendo incorrectamente. También puede probarlo con el curl -i comando:

curl -I $manifest_file_URL

También es posible que el archivo de manifiesto se almacene en caché (puede configurar los encabezados de caducidad para que caduque de inmediato). También tenga en cuenta la secuencia de recarga: su página se cargará desde AppCache primero (si está allí), luego el navegador comprueba si el archivo de manifiesto está actualizado. Si es así, descargue y coloque en la nueva versión del caché, pero esto no actualizará automáticamente la página (ni swapCache() ), tendrá que actualizar la página (al menos) una vez más.

Vea también esta presentación para más información sobre el tema.