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 Páginas de servidor activo (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. Se trata de un procedimiento incorrecto para 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 que solicitan. La mayoría de los exploradores y servidores proxy intermedios actualmente respetan 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 necesite actualizar un archivo determinado en el servidor. Cuando las páginas se actualizan periódicamente, el siguiente período de actualización es la respuesta más eficaz. Por ejemplo, una página de noticias diarias en Internet que se actualiza todos los días a las 5 a.m. El servidor web para esta página de noticias debe devolver un encabezado Expires con un valor para 5 A.M. el día siguiente. Cuando haya terminado, el explorador no necesita 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 varias páginas volátiles en un servidor que contienen información 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 por parte del usuario, Internet Explorer normalmente se pone en contacto con el servidor web para obtener actualizaciones de esa página a través de una solicitud If-Modified-Since condicional. Sin embargo, la página permanece en la caché de 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 ATRÁS y ADELANTE para acceder al historial de navegación.
- cuando el explorador está en modo sin conexión.
Encabezado Cache-Control
Sin embargo, ciertas 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 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 caché no son accesibles hasta que el explorador pueda volver a conectar 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: Sin caché
Desafortunadamente, los servidores HTTP 1.0 heredados no pueden usar el encabezado Cache-Control. Con fines de compatibilidad con versiones anteriores con servidores HTTP 1.0, Internet Explorer admite un uso especial de http Pragma: encabezado sin caché. Si el cliente se comunica con el servidor a través de una conexión segura (https://
) y el servidor devuelve un encabezado Pragma: sin caché 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 únicamente en el contexto de una solicitud, no en una respuesta. Está pensado para servidores proxy que pueden impedir que determinadas solicitudes importantes lleguen al servidor web de destino. En el caso de 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 un formulario HTTP-EQUIV especial de la etiqueta META que especifica encabezados HTTP concretos desde el documento HTML. Esta es 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é solo cuando se usa a través de una conexión segura. Pragma: la etiqueta META sin caché 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 META-EQUIV de control de caché 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. Normalmente, las etiquetas META deben aparecer en la parte superior de la sección HTML HEAD. Y hay al menos un problema conocido con la etiqueta META Pragma HTTP-EQUIV.
Opciones del servidor para el almacenamiento en caché
Cuando es necesario usar el encabezado Cache-Control en páginas que no son ASP, puede ser necesario usar opciones en la configuración del servidor para agregar este encabezado automáticamente. Para 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:
- Inicie el Administrador de IIS.
- 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.
- Abra el cuadro de diálogo Propiedades de ese directorio.
- Seleccione la pestaña Encabezados HTTP.
- Seleccione el botón Agregar en el grupo Encabezados HTTP personalizados y agregue Cache-Control para el nombre del encabezado y sin caché para el valor de encabezado.
No es una buena idea usar este encabezado globalmente en todo el servidor web. Restrinja su uso exclusivamente al contenido que absolutamente no debe almacenarse en caché en el cliente.
Lista de comprobación de problemas
Si ha aplicado las técnicas de este artículo y sigue teniendo problemas con el almacenamiento en caché e Internet Explorer, revise esta lista de comprobación práctica 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 dos veces que el servidor web tiene HTTP 1.1 activado y devuelve 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 servidor, ¿sigue exactamente la especificación HTTP 1.1, especialmente sobre la terminación CRLF de los encabezados HTTP? En el interés del rendimiento, Internet Explorer suele no ser perdonado de las respuestas que infringen la especificación HTTP 1.1. Normalmente da como resultado encabezados o informes de errores inesperados del servidor.
- ¿Los encabezados HTTP están escritos correctamente?
Consulte también
- Para obtener más información sobre el protocolo HTTP 1.1, consulte este vínculo externo: RFC 2616.
- Caché de cliente en IIS