Si entiendo correctamente, un broswer almacena en caché las imágenes, los archivos JS, etc. según el nombre del archivo. Por lo tanto, existe el peligro de que si uno de esos archivos se actualiza (en el servidor), el navegador use la copia en caché.caché de archivos del lado del cliente
Una solución para este problema es cambiar el nombre de todos los archivos (como parte de la compilación), de modo que el nombre del archivo incluya un hash MD5 de sus contenidos, p.
foo.js -> foo_AS577688BC87654.js
me.png -> me_32126A88BC3456BB.png
Sin embargo, además de cambiar el nombre de los archivos, todas las referencias a estos archivos deben modificarse. Por ejemplo, una etiqueta como <img src="me.png"/>
debe cambiarse a <img src="me_32126A88BC3456BB.png"/>
.
Obviamente, esto puede ser bastante complicado, especialmente si tenemos en cuenta que las referencias a estos archivos pueden crearse dinámicamente dentro del código del lado del servidor.
Por supuesto, una solución es deshabilitar por completo el almacenamiento en caché en el navegador (y cualquier caché entre el servidor y el navegador) usando encabezados HTTP. Sin embargo, no tener almacenamiento en caché creará su propio conjunto de problemas.
¿Existe una solución mejor?
Gracias, Don
¿Es esto realmente un problema? Los navegadores modernos comprobarán al menos una vez por sesión, si no todas las actualizaciones de página, para ver si una imagen o js u otro archivo referenciado se actualiza al agregar un encabezado if-modified-since en su solicitud. Si el archivo no se modifica, el servidor web devolverá 304 y el navegador usará el archivo en caché. – GrandmasterB
He notado un caso en el que Safari no actualizó la caché a pesar de que el usuario usa F5. Desafortunadamente no hice una revisión en profundidad ya que fue por teléfono y solo el cliente lo estaba viendo en ese momento, así que le pedí al usuario que borrara la caché de su navegador y luego Safari compró la nueva versión. –
* según el nombre del archivo * - no del todo, consulte ETags: http://en.wikipedia.org/wiki/HTTP_ETag Lo que usted haría, es usar su hash como la ETag del recurso. – Douglas