No estoy seguro de si esto es un problema del servidor, o si no estoy logrando entender cómo funciona realmente el caché de HTTP.Confusión de caché de HTTP
Tengo una aplicación ASP MVC ejecutándose en IIS7. Hay mucho contenido estático como parte del sitio, incluidos muchos CSS, Javascript y archivos de imágenes.
Para estos archivos, quiero que el navegador los guarde en caché durante al menos un día; nuestros archivos .css, .js, .gif y .png rara vez cambian.
Mi web.config es el siguiente:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge"
cacheControlMaxAge="1.00:00:00" />
</staticContent>
</system.webServer>
El problema que estoy recibiendo es que no parece que el navegador (probado Chrome, IE8 y FX) para ser el almacenamiento en caché los archivos como lo había esperar. Tengo la configuración predeterminada (compruebe las páginas más nuevas automáticamente en IE).
En la primera visita de los descargas de contenido como se esperaba
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: image/gif
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:29:16 GMT
Content-Length: 918
<content>
creo que la Cache-Control: max-age=86400
debería decirle al navegador que no solicitar la página de nuevo por un día.
Ok, ahora la página se vuelve a cargar y el navegador solicita la imagen nuevamente. Esta vez se obtiene una respuesta vacía con estos encabezados:
HTTP/1.1 304 Not Modified
Cache-Control: max-age=86400
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:30:32 GMT
Así que parece que el navegador ha enviado el ETag
espalda (como un identificador único para el recurso), y del servidor volver con una 304 Not Modified - indicando al navegador que puede usar el archivo previamente descargado.
Me parece que sería correcto para muchas situaciones de almacenamiento en caché, pero aquí no quiero el viaje redondo adicional. No me importa si la imagen se desactualiza cuando cambia el archivo en el servidor.
Hay muchos de estos archivos (incluso con sprites-maps y similares) y muchos de nuestros clientes tienen redes muy lentas. Cada viaje de ida y vuelta para hacer ping para ese estado está tomando entre 10 y 5 segundos. Muchos también tienen IE6 que solo tiene 2 conexiones HTTP a la vez. El resultado neto es que nuestra aplicación parece ser muy lenta para estos clientes, con cada página tardando un par de segundos más para verificar que el contenido estático no haya cambiado.
¿Qué encabezado de respuesta me falta que podría causar que el navegador guarde en caché agresivamente los archivos?
¿Cómo configuro esto en .Net web.config para IIS7?
¿Entiendo mal cómo funciona el almacenamiento en caché de HTTP en primer lugar?
¿Se puede desactivar ETag? Eso podría arreglarlo, pero no estoy seguro. –
Voy a intentar eliminar el ETag, pero para mi servidor de prueba parece coincidir con – Keith
Si presiona actualizar o F5, el navegador siempre hará una solicitud del servidor (posiblemente una solicitud condicional) independientemente de la configuración del caché –