temporales memoria los las internet historial eliminar desde como cache borrar archivos internet-explorer http-headers browser-cache cache-control

internet-explorer - memoria - como borrar los archivos temporales de internet desde internet explorer



Convierta recursos de IE en caché, pero revalida siempre (2)

El encabezado de control de caché "no-cache, must-revalidate, private" permite que los navegadores guarden en caché el recurso pero obliga a revalidar con solicitudes condicionales. Esto funciona como se esperaba en FF, Safari y Chrome.

Sin embargo, IE7 + 8 no envía una solicitud condicional, es decir, "If-Modified-Since" falta en el encabezado de solicitud y, por lo tanto, el servidor responde con HTTP / 200 en lugar de HTTP / 304.

Aquí están los encabezados de respuesta del servidor completo:

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT Content-type: text/html;charset=utf-8 Content-Length: 10835 Date: Wed, 16 Feb 2011 13:52:26 GMT Connection: keep-alive Cache-Control: no-cache, must-revalidate, private

Esto parece un error de IE, pero no he encontrado nada relacionado en la web, entonces me pregunto si tal vez la ausencia o la existencia de otro encabezado hace que IE se comporte de manera extraña.

Una buena discusión sobre la diferencia entre no-cache y max-age: ¿Cuál es la diferencia entre Cache-Control: max-age = 0 y no-cache?


Eventualmente lo descubrí. Aquí hay una explicación y una solución probada.

El siguiente sitio confirma mi observación: http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

Dice que IE no almacena localmente páginas con la directiva ''no-cache'' y, por lo tanto, siempre envía una solicitud incondicional.

También hay un artículo de soporte de MS - https://support.microsoft.com/help/234067/ - que confirma esto:

"Internet Explorer admite el encabezado HTTP 1.1 Cache-Control, que impide todo el almacenamiento en caché de un recurso web en particular cuando se especifica el valor sin caché ..."

Este comportamiento no es del todo incorrecto, pero no es lo que pretendía el RFC 2616 (sección 14.9.1). Acerca de ''no-cache'' dice "... un caché NO DEBE usar la respuesta para satisfacer una solicitud posterior sin una revalidación exitosa con el servidor de origen". Entonces la respuesta PUEDE ser almacenada en caché, pero DEBE revalidarla. Los principales navegadores, a excepción de IE, almacenan en caché la respuesta y la vuelven a validar. Para evitar el almacenamiento de la solicitud, existe la directiva de control de caché "sin almacenamiento".

En resumen, IE trata ''no-cache'' como ''no-store''.

Y aquí está la solución para habilitar solicitudes condicionales para IE y otros navegadores de una manera consistente:

No use ningún caché, sino que establezca el encabezado Vence al pasado (o -1, que tiene el mismo efecto). IE, así como los otros navegadores principales, enviarán solicitudes condicionales. (Tenga en cuenta que también debe tener en cuenta el error de encabezado de IE Vary, que impide el almacenamiento en caché).

Estos son los campos de encabezado críticos:

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT Expires: -1 Cache-Control: must-revalidate, private

  • Last-Modified (o ETag) es necesario como un validador
  • Expira -1 indica que el recurso está obsoleto y debe ser revalidado
  • Cache-Control no debe incluir no-cache o no-store

$last_modified = filemtime($_SERVER[''SCRIPT_FILENAME'']); session_cache_limiter(FALSE); header("Content-Type: text/css"); header("Cache-Control: max-age=1, must-revalidate, private"); header("Last-Modified: " . gmdate("D, d M Y H:i:s", $last_modified) . " GMT"); if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) { if(strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) >= $last_modified) { header("HTTP/1.1 304 Not Modified"); exit; } }