Cómo impedir el almacenamiento en caché en Internet Explorer

En este artículo se describe el uso de encabezados HTTP para controlar el almacenamiento en caché de las páginas web en Internet Explorer.

Versión del producto original:   Internet Explorer
Número de KB original:   234067

Resumen

Puede usar Microsoft Internet Information Server (IIS) para marcar fácilmente las páginas muy volátiles o confidenciales mediante el siguiente script en el extremo inicial de las páginas específicas de páginas Active Server (ASP):

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

Expiración y el encabezado Expires

Se recomienda encarecidamente que todos los servidores web usen un esquema para la expiración de todas las páginas Web. No es recomendable que un servidor Web proporcione información de expiración a través del encabezado de respuesta Expires de HTTP para cada recurso devuelto a los clientes que lo solicitan. La mayoría de los exploradores y servidores proxy intermedios de hoy respetan esta información de expiración y la usan para aumentar la eficacia de las comunicaciones a través de la red.

El encabezado Expires siempre debe usarse para especificar el tiempo más razonable en el que el cliente debe actualizar un archivo en particular en el servidor. Cuando se actualizan las páginas con regularidad, el siguiente período de actualización es la respuesta más eficiente. Tomemos, por ejemplo, una página de noticias diaria en Internet que se actualiza todos los días a las 5 A.M. El servidor Web de esta página de noticias debe devolver un encabezado Expires con un valor de 5 A.M. el día siguiente. Una vez hecho esto, el explorador no tendrá que volver a ponerse en contacto con el servidor web hasta que la página haya cambiado.

Las páginas que no se espera que cambien deben marcarse con una fecha de expiración de aproximadamente un año.

En muchos casos, los servidores web tienen una o más páginas volátiles en un servidor que contienen información, que está sujeta a cambios de forma inmediata. Estas páginas deben estar marcadas por el servidor con el valor "-1" para el encabezado Expires. En las solicitudes futuras del usuario, Internet Explorer normalmente se pone en contacto con el servidor web para obtener las actualizaciones de esa página mediante una solicitud If-Modified-sincr condicional. Sin embargo, la página permanece en la caché de disco (archivos temporales de Internet) y se usa en situaciones adecuadas sin tener que ponerse en contacto con el servidor Web remoto, como cuando se usan los botones atrás y adelante para obtener acceso al historial de navegación o cuando el explorador está en modo sin conexión.

El encabezado Cache-Control

Algunas páginas, sin embargo, son tan volátiles o sensibles que no requieren almacenamiento en caché de disco. Para ello, Internet Explorer admite el encabezado HTTP 1,1 cache-control, que impide el almacenamiento en caché de un recurso Web en particular cuando un servidor HTTP 1,1 especifica el valor no-cache.

Dado que las páginas que se conservan fuera de la caché no son accesibles hasta que el explorador puede reconectar con el servidor Web, los servidores deben usar el encabezado Cache-Control con moderación. En la mayoría de los casos, el uso de Expires es preferible:-1.

El encabezado pragma: no-cache

Desafortunadamente, los servidores HTTP 1,0 heredados no pueden usar el encabezado Cache-Control. Por motivos de compatibilidad con versiones anteriores con servidores HTTP 1,0, Internet Explorer admite un uso especial del encabezado HTTP pragma: no-cache. Si el cliente se comunica con el servidor a través de una conexión segura ( https:// ) y el servidor devuelve un encabezado pragma: no-cache con la respuesta, Internet Explorer no almacena en caché la respuesta.

Sin embargo, tenga en cuenta que el encabezado pragma: no-cache no se diseñó para ello. De acuerdo con las especificaciones HTTP 1,0 y 1,1, este encabezado se define en el contexto de una solicitud solamente, no una respuesta, y está pensada para los servidores proxy que pueden impedir que determinadas solicitudes importantes lleguen al servidor Web de destino. Para las aplicaciones futuras, el encabezado Cache-Control es el medio adecuado para controlar el almacenamiento en caché.

Etiquetas META HTTP-EQUIV

Las páginas HTML permiten una forma HTTP-EQUIV especial de la etiqueta META que especifica determinados encabezados HTTP en el documento HTML. A continuación, se incluye una página HTML de ejemplo breve que usa pragma: no-cache y Expires:-1:

<HTML>
    <HEAD>
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="-1">
    </HEAD>
<BODY>
</BODY>
</HTML>

Pragma: no-cache impide el almacenamiento en caché cuando se usa a través de una conexión segura. Una etiqueta META pragma: no-cache se trata de forma idéntica a Expires:-1 si se usa en una página no segura. La página se almacenará en caché pero se marcará como expirada inmediatamente.

Las etiquetas META HTTP-EQUIV de control de caché se omiten y no tienen efecto en las versiones 4 o 5 de Internet Explorer. Para usar cache-control, este encabezado debe especificarse mediante encabezados HTTP, como se describe en la sección anterior cache-control.

Nota

el uso de encabezados HTTP estándar es mucho más preferido que las etiquetas META. Normalmente, las etiquetas META deben aparecer en la parte superior de la sección de encabezado HTML. Y hay, al menos, un problema conocido con la etiqueta META HTTP-EQUIV pragma.

Opciones de servidor para el almacenamiento en caché

Cuando el encabezado Cache-Control deba usarse en páginas que no sean ASP, puede que sea necesario usar opciones en la configuración del servidor para agregar este encabezado automáticamente. Consulte la documentación del servidor para obtener información sobre el proceso de agregar encabezados HTTP a las respuestas del servidor para un directorio en particular. Por ejemplo, en IIS 4, siga estos pasos:

  • Invocar al administrador de servicios Internet.
  • Mediante el árbol de equipos y servicios, abra el servidor Web predeterminado (o el servidor Web en cuestión) y busque el directorio que contiene el contenido que necesita el encabezado Cache-Control.
  • Abra el cuadro de diálogo Propiedades para ese directorio.
  • Elija la ficha encabezados HTTP.
  • Haga clic en el botón Agregar del grupo encabezados HTTP personalizados y agregue cache-control para el nombre de encabezado y no-caché para el valor del encabezado.

Recuerde que no es una buena idea usar este encabezado globalmente en todo el servidor Web. Restrinja su uso únicamente al contenido que no debe almacenarse en caché en el cliente. Lista de comprobación de problemas si ha aplicado las técnicas descritas en este artículo y sigue teniendo problemas con el almacenamiento en caché e Internet Explorer, revise esta lista de comprobación paso a paso antes de ponerse en contacto con Microsoft para obtener asistencia técnica.

  • ¿Usa el encabezado Cache-Control con la propiedad ASP Response.CacheControl o a través de un encabezado HTTP devuelto? Esta es la única forma de evitar verdaderamente el almacenamiento en caché en Internet Explorer.
  • ¿Usa Internet Explorer 4,01 Service Pack 2 o posterior? No hay ninguna manera de evitar completamente el almacenamiento en caché en versiones anteriores del explorador.
  • ¿Ha comprobado dos veces que el servidor Web tiene activado HTTP 1,1 y está devolviendo respuestas HTTP 1,1 a Internet Explorer? Los encabezados cache-control no son válidos en las respuestas HTTP 1,0.
  • Si usa CGI/ISAPI/Servlets en el lado servidor, ¿está siguiendo la especificación HTTP 1,1 exactamente, especialmente en cuanto a la terminación CRLF de los encabezados HTTP? En interés del rendimiento, Internet Explorer suele ocasionar de respuestas que infringen la especificación HTTP 1,1. Esto suele dar como resultado los encabezados omitidos o los informes de errores inesperados del servidor.
  • ¿Los encabezados HTTP están escritos correctamente?

Referencias

Para obtener más información acerca de HTTP/1.1, consulte RFC 2616.