html - navegadores - forzar carga pagina web
¿Hay alguna manera de obligar a los navegadores a actualizar/descargar imágenes? (10)
Tengo un problema donde los usuarios informan que sus imágenes no se están cargando y las antiguas todavía están allí. En una inspección más cercana, las nuevas imágenes están allí, solo tienen el mismo nombre que la anterior. Lo que hago en la carga es que cambie el nombre de las imágenes para fines de SEO. Cuando eliminan una imagen, el índice anterior se vuelve disponible y se reutiliza. Por lo tanto, tiene el mismo nombre de imagen.
¿Hay alguna manera de (creo que tal vez haya una metaetiqueta para esto) decirle al navegador que no use su cache?
La mejor respuesta es cambiar el nombre de la imagen a algo totalmente nuevo. Voy a trabajar en eso, pero mientras tanto, es la solución rápida mientras trabajo en el problema más grande.
Añada la fecha y hora actual a la imagen src:
<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />
Agregue una cadena de consulta con un número único arbitrario (o hora, o número de versión, etc.):
<img src="image.png?80172489074" alt="a cool image" />
Esto dará como resultado una nueva solicitud, debido a la diferente URL.
En PHP puede enviar un número aleatorio o la marca de tiempo actual:
<img src="image.jpg?<?=Date(''U'')?>">
o
<img src="image.jpg?<?=rand(1,32000)?>">
Es duro. Realmente desea que las imágenes se almacenen en caché, pero luego no desea almacenarlas en caché una vez que haya nuevas disponibles:
- El uso del encabezado expira con una fecha en el pasado impide el almacenamiento en caché. Malo
- Agregar un parámetro de "almacenamiento en memoria caché" 342038402 puede solucionar el problema, pero también puede evitar que la imagen se almacene en caché, lo que no es lo que desea. Malo.
- El uso del encabezado caduca con un corto (digamos 1 h) caduca es mejor ... después de una hora el usuario verá la imagen, pero su servidor web no tendrá que servirla cada vez. Compromiso, pero ¿qué tiempo funciona? No es realmente factible.
¿La solución? Puedo pensar en dos buenas opciones:
- Mire eTags, y su habilidad para usarlos. Estos están diseñados para esta situación. El navegador preguntará explícitamente a su servidor si el archivo está actualizado o no. Puedes encender esto en apache si no lo tienes listo.
- Cree una nueva URL para cada nueva imagen (y use un encabezado de futuro lejano expira). Esto es en lo que estás trabajando.
Ir al azar Simplemente use un número aleatorio y añádalo con el nombre de archivo de la imagen.
<img src="image.jpg?<?=rand(1,1000000)?>">
Puede poner http-equiv
en la etiqueta <meta>
que le indicará al navegador que no use el caché (o incluso mejor, úsela de alguna manera definida), pero es mejor configurar el servidor para que envíe los encabezados de cache
http adecuados. Mira el artículo sobre el almacenamiento en caché .
Aún así, es posible que algunos navegadores no sean compatibles con todos los estándares http
, pero creo que es el camino a seguir.
Si observa los datos intercambiados entre su navegador y el servidor, verá que el navegador enviará una solicitud HTTP HEAD para las imágenes. El resultado contendrá la hora de modificación (pero no los datos de imagen reales). Asegúrese de que esta vez cambie si la imagen cambia en el servidor y el navegador debe descargar la imagen nuevamente.
en PHP puedes usar este truco
<img src="image.png?<?php echo time(); ?>" />
La función de tiempo () muestra la marca de tiempo actual. Cada carga de página es diferente. Entonces, este código engaña al navegador: lee otra ruta y "piensa" que la imagen ha cambiado desde que el usuario visitó el sitio la última vez. Y tiene que volver a descargarlo, en lugar de usar el de caché.
ese no fue el resultado correcto, creo que esta es la forma de programarlo correctamente.
<td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row[''address'']."?=".rand(1,999)."/>" ?></td>
puede controlar el comportamiento de la memoria caché jugando con los encabezados HTTP.
establecer el encabezado expira en pasado obligaría al navegador a no usar la versión en caché.
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Puede consultar el RFC para tener más detalles.