Tengo un sitio php ejecutándose en un servidor en la nube. Cuando agrego nuevos archivos css, js o imágenes, el navegador está cargando los mismos viejos archivos js, css e imágenes almacenados en caché.
Mi sitio tiene una etiqueta doctype y meta como se muestra a continuación
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
Debido al doctype y metacódigo anteriores, ¿estoy cargando los mismos archivos almacenados en caché en el navegador en lugar de uno nuevo?
php
http-headers
browser-cache
cache-control
ArrayOutOfBound
fuente
fuente
No Cache in all Browsers
. También puede hacer un? RandomGeneratedNumber en los archivos que no desea que se almacenen en caché.Respuestas:
prueba esto
fuente
session_start()
después, sobrescribirá su encabezadoCache-Control: private, max-age=10800, pre-check=10800
porque 180 minutos es el valor predeterminado desession.cache_expire
. Si no puede evitar iniciar la sesión, pero necesita deshabilitar el uso de cachésession_cache_limiter('private');session_cache_expire(0);
.header
función es un booleano para reemplazar . El parámetro opcional replace indica si el encabezado debe reemplazar un encabezado similar anterior o agregar un segundo encabezado del mismo tipo.Aquí, si desea controlarlo a través de HTML: haga lo siguiente: Opción 1:
Y si quieres controlarlo a través de PHP: hazlo como se muestra a continuación. Opción 2:
Y la opción 2 SIEMPRE ES MEJOR para evitar problemas de almacenamiento en caché basado en proxy.
fuente
Puedes probar esto:
¡Ojalá ayude a prevenir el caché, si lo hay!
fuente
Tuve problemas con el almacenamiento en caché de mis archivos css. Establecer encabezados en PHP no me ayudó (¿tal vez porque los encabezados tendrían que establecerse en el archivo de hoja de estilo en lugar de la página que lo vincula?).
Encontré la solución en esta página: https://css-tricks.com/can-we-prevent-css-caching/
La solución:
Agregue la marca de tiempo como parte de la consulta del URI para el archivo vinculado.
(Se puede usar para css, js, imágenes, etc.)
Para desarrollo:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
Para la producción (donde el almacenamiento en caché es principalmente bueno):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(y reescribir manualmente cuando sea necesario)
O combinación de estos dos:
EDITAR:
O combinación más bonita de esos dos:
fuente
Prevenir la memoria caché del navegador no es una buena idea dependiendo del caso. Buscando una solución, encontré soluciones como esta:
El problema aquí es que si el archivo se sobrescribe durante una actualización en el servidor, que es mi escenario, el caché se ignora porque la marca de tiempo se modifica, incluso el contenido del archivo es el mismo.
Utilizo esta solución para obligar al navegador a descargar activos solo si se modifica su contenido:
fuente
stat
llamada. Sin caché del sistema de archivos, 16ns, tops? Con caché, confiablemente <8ns. Nanosegundos Y en mi sistema, MD5 puede procesar 754 MiB / s sin parpadear. (openssl speed md5
) Combinado, un archivo CSS de 100 KB tendría una sobrecarga adicional combinada de ... 129µs (microsegundos, 0.1295ms) + 8ns (que no contribuye significativamente al número final) = 129µs.hash_file('md5', $deployment_counter)
ohash_file('md5', $cache_clear_counter)
son los primeros que vienen a la mente.