Cache del navegador

14/09/2006 - 11:22 por Sergio | Informe spam
Hola:

Lo siento si el tema del cache ya está muy trillado, pero tengo un
problema y me gustaría saber como resorverlo:

En un ambiente de intranet donde la velocidad de conexión no es
crítica y el navegador cliente siempre es IE, expiro todas las
páginas .asp con las siguientes instrucciones:

Response.CacheControl = "no-cache"
Response.AddHeader "Pragma","no-cache"
Response.Expires = -1

Además, para los ficheros .js anexo un número aleatorio al final del
fichero lo que provoca que siempre se descarguen el fichero en cada
nueva petición a una página. Por ejemplo:
<script language="javascript"
source="js?ID=<%=GetRandomNumber%>"></script>

Para imágenes y ficheros de hojas de estilo no se como hacer esto, es
decir, no puedo agregar un parámetro "dummy" como en los js o vbs,
así que sólo queda la solución de actualizar la página (botón
Actualizar) o borrar los ficheros temporales de internet del
explorador.

Y yo me pregunto (y asumiendo que en el menú Herramientas / Opciones /
Configuración... del IE está activada la opción "Comprobar si hay
nuevas versiones de las páginas guardadas" a "automáticamente", que
es la opción por defecto, me parece...) ¿Como un sitio de internet se
asegura que los usuarios que navegan por él siempre disponen de la
última hoja de estilos o de la última imagen?... No creo que cambien
el nombre de la imagen o css o js cada vez que quieran hacer un cambio
en su sitio web, para que así no las coja de cache el navegador...

Si no quiero penalizar el rendimiento (quiero que los clientes utilicen
la cache) pero a la vez quiero asegurarme que siempre disponen de las
versiones más recientes de los elementos de mi web (js, css, jpg, gif,
etc...) ¿Cómo lo hago?

Perdón por el rollo, gracias desde ya y un saludo.
 

Leer las respuestas

#1 Miguel Gonzalez
14/09/2006 - 17:24 | Informe spam
Hola Sergio.

(Buena cuestión).

En teoría (siempre en teoría), los navegadores deberían gestionar la
caché (cuando ésta está configurada en "automática") comparando las
versiones de las páginas/recursos que tienen almacenadas en la caché con
la existentes en el servidor. Hasta donde sé, este mecanismo funciona
correctamente en los principales navegadores (IE, FF, Opera, etc.)

El problema surge cuando entre el navegador y el servidor se interponen
los proxies-caché, los cuales desvirtuan y dificultan la comparación de
caché que realizan los navegadores (algunos proxies incluso parecen
obviar los encabezados "no-cache").

El problema no tiene fácil solución natural, salvo que los proxies
actualicen su cache de forma regular. Esto lo hacen con determinadas
páginas muy solicitadas, pero con las modestas pasa lo que pasa...


Saludos!

Miguel

Sergio escribió:
Hola:

Lo siento si el tema del cache ya está muy trillado, pero tengo un
problema y me gustaría saber como resorverlo:

En un ambiente de intranet donde la velocidad de conexión no es
crítica y el navegador cliente siempre es IE, expiro todas las
páginas .asp con las siguientes instrucciones:

Response.CacheControl = "no-cache"
Response.AddHeader "Pragma","no-cache"
Response.Expires = -1

Además, para los ficheros .js anexo un número aleatorio al final del
fichero lo que provoca que siempre se descarguen el fichero en cada
nueva petición a una página. Por ejemplo:
<script language="javascript"
source="js?ID=<%=GetRandomNumber%>"></script>

Para imágenes y ficheros de hojas de estilo no se como hacer esto, es
decir, no puedo agregar un parámetro "dummy" como en los js o vbs,
así que sólo queda la solución de actualizar la página (botón
Actualizar) o borrar los ficheros temporales de internet del
explorador.

Y yo me pregunto (y asumiendo que en el menú Herramientas / Opciones /
Configuración... del IE está activada la opción "Comprobar si hay
nuevas versiones de las páginas guardadas" a "automáticamente", que
es la opción por defecto, me parece...) ¿Como un sitio de internet se
asegura que los usuarios que navegan por él siempre disponen de la
última hoja de estilos o de la última imagen?... No creo que cambien
el nombre de la imagen o css o js cada vez que quieran hacer un cambio
en su sitio web, para que así no las coja de cache el navegador...

Si no quiero penalizar el rendimiento (quiero que los clientes utilicen
la cache) pero a la vez quiero asegurarme que siempre disponen de las
versiones más recientes de los elementos de mi web (js, css, jpg, gif,
etc...) ¿Cómo lo hago?

Perdón por el rollo, gracias desde ya y un saludo.

Preguntas similares