Utilización o no de la Caché

  • Por
Vemos las herramientas que están a nuestra disposición en ASP que nos ayudan a controlar el uso de la caché de los navegadores y servidores proxy.
Es habitual que los programadores de páginas dinámicas se las tengan que ver con la caché en algunas ocasiones y tengan que evitar que los navegadores la utilicen para que todo marche correctamente. Existen varias opciones con las que configurar el comportamiento de la caché a través de las cabeceras del HTTP, que son las que vamos a introducir en este capítulo.

Por lo general los navegadores guardan una copia de cada archivo al que acceden en la caché del navegador y cuando consultan otra vez un archivo que ya tienen en la caché local comprueban la fecha de la copia que tienen con la que está en el servidor. Si las dos tienen la misma fecha de modificación el servidor le envía un mensaje informándolo. Si por el contrario, la página que está en el servidor es más nueva, el servidor la envía al cliente. Esta comprobación puede ser alterada gracias a las cabeceras del HTTP, a través de las propiedades Response.Expires y Response.ExpiresAbsolute.

Response.Expires

Sirve para indicar, en minutos, el tiempo que ha de pasar hasta que la página caduque. Durante este tiempo no se solicitará la página al servidor y se utilizará la página que está en la caché.

<%
response.expires=2 'caducara a los 2 minutos
%>


Si igualamos la propiedad a 0, la página caduca instantáneamente, con lo que se evita la caché

<%
response.expires=0 'caduca instantáneamente
%>


Response.ExpiresAbsolute

Con esta propiedad se puede expresar el momento exacto en el que caducará la página y a partir del cuál el navegador no debe tomarla de la caché.

<%
response.expiresAbsolute=dateAdd("yyyy",1,now) 'caducara dentro de un anyo
%>


En este ejemplo se define que la página caduque al año de haberse recibido, puesto que se utiliza la función dateAdd() para añadir un año a la fecha actual. Podríamos haber puesto cualquier otra fecha compuesta por el día y la hora con el formato correspondiente en nuestro sistema.

Ejemplos:

Podemos ver a continuación unos ejemplos online con cada una de estas tres posibilidades. Los resultados que se obtienen en estos ejemplos pueden variar puntualmente en algún navegador, pero las pruebas realizadas con varios navegadores han dado resultados positivos.

Páginas públicas o privadas

En ocasiones es importante controlar la privacidad de la información que se manda. Supongamos que en nuestro acceso a Internet tenemos un proxy cerca. Los servidores proxy tienen su propia memoria caché y si un usuario accede a una página a la que ya había accedido otro usuario posiblemente el proxy le envíe la copia de la página que tenía en su memoria caché. En algunas ocasiones nos interesará que la página la sirva el proxy y en otras nos interesará que la página la sirva directamente el servidor y esto lo podremos dominar fácilmente con Response.Expires. Pero hay un caso especial en el que puede ser especialmente problemático que un usuario acceda a una página que estaba construida para otro, por ejemplo en el caso de que la información fuese confidencial o extraída para el usuario primero.

Para evitar que páginas con contenidos personales se puedan mandar a otras personas distintas de su dueño por culpa de los servidores proxy está la propiedad Response.CacheControl. Si le asignamos el valor "Private" la página no será guardada por los servidores proxy. Si le asignamos el valor "Public" las páginas si que se almacenarán en los servidores proxy y podrán ser enviadas a otras personas.

<%
Response.CacheControl = "Public"
%>

<%
Response.CacheControl = "Private"
%>


Otro truquillo

Otra manera de evitar la caché se puede realizar de una manera más artesanal. Se trata de conseguir que la URL a la que accedemos siempre varíe. Como siempre será distinta nunca se buscarán los archivos de la caché.

Conseguir que el URL de la página sea siempre distinto se puede hacer gracias al paso de parámetros por la URL, aunque luego en la página no utilicemos los parámetros para nada, conseguiremos que la URL varíe. Para mandar en un parámetro siempre un número distinto podemos adjuntar una variable que construimos con la hora del sistema.

<%
Tiempo_url = year(now) & month(now) & day(now) & hour(now) & minute(now) & second(now)
%>
<a href="ejemplocachev21.asp?parametro=<%=Tiempo_url%>">Ver</a>


Vemos cómo se construye un enlace que tiene un parámetro que cambia cada segundo. Podemos verlo funcionando para que quede más ilustrado.

No llegar a guardar la página en la caché

Puede ser útil decirle al navegador que no llegue a guardar la página en la caché mandándole una cabecera especial en el HTTP, sobretodo en casos como el anterior, que estamos guardando muchas páginas en la caché, una por cada vez que se accede con un parámetro distinto en la URL.

<%
Response.AddHeader "PRAGMA", "NO-CACHE"
%>


Con Response.AddHeader se pueden mandar más tipos de encabezamientos del http como la fecha de modificación del documento (LAST-MODIFIED) o el tiempo en el que se tiene que realizar un refresco de la página (REFRESH).

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

agradecido

21/9/2004
muchas gracias me sirvio de mucho el consejo

alex

10/2/2011
Problema con la caché
Hola. Acabamos de actualizar una web y la versión antigua tenía un index.html. Ahora el nuevo index.html hace una redirección a otro dominio que es donde está la web nueva, pero todos los usuarios que accedieron en su momento, cargan la página de caché y no redirecciona. como se podría solucionar esto?
muchas gracias

Eikki

28/2/2012
Response.expires
Si se quiere que la pagina caduque inmediatamente se le deberá asignar el valor 0, pero es mas efectivo asigar un valor negativo alto como -1000...