enable control cachecontrolmode cache asp.net iis caching iis-7

asp.net - enable - cachecontrolmode



IIS7 Cache-Control (6)

Estoy tratando de hacer algo que pensé que sería bastante simple. Obtenga IIS 7 para decirle a los clientes que pueden almacenar en caché todas las imágenes de mi sitio durante un tiempo determinado, digamos 24 horas.

He intentado el paso en http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx pero fue en vano. Todavía recibo solicitudes para el servidor con 304s devueltos.

¿Alguien tiene una manera de hacer esto? Tengo un sitio gráficamente intensivo y mis usuarios están siendo martillados (al igual que mi servidor) cada vez que solicitan una página. Curiosamente, las imágenes parecen tener "Cache-Control private, max-age = 3600" apareciendo en Firebug pero el navegador todavía las está solicitando cuando presiono F5.


Complementando la respuesta de Elmer, ya que mi edición fue revertida.

Para almacenar en caché el contenido estático durante 365 días con un encabezado de control de caché pública , IIS se puede configurar con la siguiente

<staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> </staticContent>

Esto se traducirá en un encabezado como este:

Cache-Control: public,max-age=31536000

Tenga en cuenta que max-age es un delta en segundos, expresado por un entero positivo de 32 bits como se indica en RFC 2616 Secciones 14.9.3 y 14.9.4 . Esto representa un valor máximo de 2 ^ 31 o 2,147,483,648 segundos (más de 68 años). Sin embargo, para garantizar mejor la compatibilidad entre clientes y servidores, adoptamos un máximo recomendado de 365 días (un año).

Como se menciona en otras respuestas, puede usar estas directivas también en la página web de su sitio para todo el contenido estático. Como alternativa, puede usarlo solo para los contenidos en una ubicación específica también (en la muestra, caché pública de 30 días para los contenidos en la carpeta "cdn"):

<location path="cdn"> <system.webServer> <staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/> </staticContent> </system.webServer> </location>


El F5 Refresh tiene la semántica de "recargar el HTML actual Y sus dependencias directas". Por lo tanto, debe esperar ver cualquier recurso imgs, css y js referenciado directamente por el HTML que también se vuelve a analizar. Por supuesto, un 304 es una respuesta aceptable a esto, pero la actualización de F5 implica que el navegador realizará la solicitud en lugar de confiar en el contenido del caché nuevo.

En su lugar, intente simplemente navegar en otro lugar y luego navegar hacia atrás.

Puede forzar la actualización, más allá de un 304, manteniendo presionado ctrl mientras presiona f5 en la mayoría de los navegadores.


Eso no es cierto Jeff.

Simplemente tiene que seleccionar una carpeta dentro de su interfaz de usuario del Administrador de IIS 7 (por ejemplo, Imágenes o evento la carpeta Aplicación web predeterminada) y luego hacer clic en "Encabezados de respuesta HTTP". Luego tiene que hacer clic en "Establecer encabezado común ..." en el panel derecho y seleccionar "Caducar contenido web". Allí puede configurar fácilmente un máximo de 24 horas seleccionando "Después de", ingresando "24" en el cuadro de texto y seleccionando "Horas" en el cuadro combinado.

Su primer párrafo con respecto a la entrada web.config es correcto. Agregaría el atributo cacheControlCustom para establecer el encabezado de control de caché en "público" o lo que sea necesario en ese caso.

Por supuesto, puede lograr lo mismo al proporcionar entradas (o archivos) web.config según sea necesario.

Editar: eliminó una frase confusa :)


Si desea establecer el encabezado Cache-Control, no hay nada en la IU de IIS7 para hacer esto, lamentablemente.

Sin embargo, puede colocar este web.config en la raíz de la carpeta o sitio donde desea configurarlo:

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> </staticContent> </system.webServer> </configuration>

Eso informará al cliente que guarde el contenido en caché durante 7 días en esa carpeta y en todas las subcarpetas.

También puede hacerlo editando la metabase IIS7 a través de appcmd.exe , así:

/Windows/system32/inetsrv/appcmd.exe set config "Default Web Site/folder" -section:system.webServer/staticContent -clientCache.cacheControlMode:UseMaxAge /Windows/system32/inetsrv/appcmd.exe set config "Default Web Site/folder" -section:system.webServer/staticContent -clientCache.cacheControlMaxAge:"7.00:00:00"


hay una manera fácil: 1. usando el sitio web''s web.config 2. en la sección "staticContent" elimina el archivo específicoExtension y agrega mimeMap 3. agrega "clientCache"

<configuration> <system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> <staticContent> <remove fileExtension=".ipa" /> <remove fileExtension=".apk" /> <mimeMap fileExtension=".ipa" mimeType="application/iphone" /> <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" /> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="777.00:00:00" /> </staticContent> </system.webServer> </configuration>


yo uso esto

<staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" /> </staticContent>

para almacenar en caché el contenido estático durante 500 días con un encabezado de control de caché público.