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

Advertencia

Se ha programado la deshabilitación permanente de la aplicación de escritorio retirada y sin soporte de Internet Explorer 11 a través de una actualización de Microsoft Edge en ciertas versiones de Windows 10. Para obtener más información, consulte Preguntas frecuentes sobre la retirada de la aplicación de escritorio de Internet Explorer 11.

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

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

Resumen

Puede usar Microsoft Internet Information Server (IIS) para marcar fácilmente páginas altamente volátiles o confidenciales mediante el siguiente script al principio extremo de las páginas específicas de Active Server Pages (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. Es una práctica incorrecta que un servidor web no proporcione información de expiración a través del encabezado de respuesta HTTP Expires para cada recurso devuelto a los clientes solicitantes. La mayoría de los exploradores y servidores proxy intermedios respetan hoy esta información de expiración y la usan para aumentar la eficacia de las comunicaciones a través de la red.

Use siempre el encabezado Expires para especificar el tiempo más razonable cuando el cliente debe actualizar un archivo determinado en el servidor. Cuando las páginas se actualizan con regularidad, el siguiente período de actualización es la respuesta más eficaz. 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 para las 5 A.M. del día siguiente. Cuando haya terminado, el explorador no tendrá que ponerse en contacto con el servidor web de nuevo 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 varias páginas volátiles en un servidor que contienen información que está sujeta a cambios inmediatamente. Estas páginas deben estar marcadas por el servidor con un valor de "-1" para el encabezado Expires. En futuras solicitudes del usuario, Internet Explorer normalmente se pone en contacto con el servidor web para obtener actualizaciones en esa página a través de una solicitud condicional If-Modified-Since. Sin embargo, la página permanece en la memoria caché del disco (archivos temporales de Internet). Y la página se usa en situaciones adecuadas sin ponerse en contacto con el servidor web remoto, como:

  • cuando se usan los botones BACK y FORWARD para acceder al historial de navegación.
  • cuando el explorador está en modo sin conexión.

Encabezado Cache-Control

Sin embargo, algunas páginas son tan volátiles o confidenciales que no requieren almacenamiento en caché de disco. Para ello, Internet Explorer admite el encabezado http 1.1 Cache-Control. Este encabezado impide todo el almacenamiento en caché de un recurso web determinado cuando un servidor HTTP 1.1 especifica el valor sin caché.

Las páginas que se mantienen fuera de la memoria caché no son accesibles hasta que el explorador pueda volver a contactar con el servidor web. Por lo tanto, los servidores deben usar el encabezado Cache-Control con moderación. En la mayoría de los casos, se prefiere el uso de Expires: -1.

Encabezado Pragma: No-Cache

Desafortunadamente, los servidores HTTP 1.0 heredados no pueden usar el encabezado Cache-Control. Para fines 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, el encabezado Pragma: no-cache no era para este propósito. Según las especificaciones HTTP 1.0 y 1.1, este encabezado se define solo en el contexto de una solicitud, no en una respuesta. Está pensado para servidores proxy que pueden impedir que ciertas solicitudes importantes lleguen al servidor web de destino. Para futuras aplicaciones, el encabezado Cache-Control es el medio adecuado para controlar el almacenamiento en caché.

Etiquetas HTTP-EQUIV META

Las páginas HTML permiten un formulario HTTP-EQUIV especial de la etiqueta META que especifica encabezados HTTP concretos desde el documento HTML. Esta es una breve página HTML de ejemplo 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é solo 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.

Cache-Control etiquetas META HTTP-EQUIV se omiten y no tienen ningún 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 Cache-Control anterior.

Nota:

El uso de encabezados HTTP estándar es muy preferible a las etiquetas META. Las etiquetas META normalmente deben aparecer en la parte superior de la sección HTML HEAD. Y hay al menos un problema conocido con la etiqueta META HTTP-EQUIV de Pragma.

Opciones del servidor para el almacenamiento en caché

Cuando es necesario usar el encabezado Cache-Control en páginas que no son de ASP, es posible que sea necesario usar opciones en la configuración del servidor para agregar este encabezado automáticamente. Para ver el proceso de agregar encabezados HTTP a las respuestas del servidor para un directorio determinado, consulte el documento del servidor. Por ejemplo, en IIS 4, siga estos pasos:

  1. Inicie el Administrador de IIS.
  2. En el árbol de equipos y servicios, abra el servidor web predeterminado o el servidor web en cuestión. Busque el directorio que contiene el contenido que necesita el encabezado Cache-Control.
  3. Abra el cuadro de diálogo Propiedades de ese directorio.
  4. Seleccione la pestaña Encabezados HTTP .
  5. Seleccione el botón Agregar en el grupo Encabezados HTTP personalizados y agregue Cache-Control para el nombre del encabezado y no-cache para el valor del encabezado.

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 del problema

Si ha aplicado las técnicas de este artículo y sigue teniendo problemas con el almacenamiento en caché e Internet Explorer, revise esta práctica 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? Es la única manera de evitar realmente el almacenamiento en caché en Internet Explorer.
  • ¿Usa Internet Explorer 4.01 Service Pack 2 o superior? No hay ninguna manera de evitar completamente el almacenamiento en caché en versiones anteriores del explorador.
  • ¿Ha comprobado de forma doble que el servidor web tiene HTTP 1.1 activado y está devolviendo respuestas HTTP 1.1 a Internet Explorer? Cache-Control encabezados no son válidos en las respuestas HTTP 1.0.
  • Si usa CGI/ISAPI/Servlets en el lado servidor, ¿sigue exactamente la especificación HTTP 1.1, especialmente sobre la terminación crlf de encabezados HTTP? En interés del rendimiento, Internet Explorer suele no perdonar las respuestas que infringen la especificación HTTP 1.1. Normalmente, da lugar a encabezados o informes omitidos de errores inesperados del servidor.
  • ¿Los encabezados HTTP se escriben correctamente?

Vea también