2010-11-17 9 views
9

Antecedentesalmacenamiento en caché de salida sigue agregando Cache-Control: no-cache, incluso cuando está desactivada

Un cliente está ejecutando nuestra aplicación web. a través de HTTPS y se están ejecutando en el error (bastante conocido) IE8 "el archivo no se puede escribir en la memoria caché" cuando intentan ver un archivo PDF/Excel/word porque la respuesta contiene la directiva HTTP Cache-Control:no-cache. La cuestión es que no es nuestra aplicación (o su configuración) la que está agregando esta directiva.

Después de un poco de investigación descubrí que la función de almacenamiento en caché de resultados de página IIS7 también puede agregar este encabezado, por ejemplo

<caching enabled="false" enableKernelCache="false"> 
    <profiles> 
     <add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> 
    </profiles> 
</caching> 

tendrá el efecto de la adición Cache-Control:no-cache, private a las cabeceras de respuesta.

Mi pregunta

Pero el sorprendente (OMI) es que incluso cuando supuestamente desactivar la característica (ver en mi config fragmento anterior que enabled="false"), las cabeceras de respuesta siguen siendo enviados con Cache-Control:no-cache, private .

¿Estoy siendo estúpido al ser sorprendido por esto (creo que probablemente lo sea)?

Respuesta

5

Usted no está solo: http://forums.iis.net/t/1152306.aspx

También tuvimos el mismo problema. No he encontrado ninguna documentación sobre esta "característica", así que supongo que es un error.

Decidimos eliminar la etiqueta de almacenamiento en caché y usar solo la etiqueta de clienteCache.

4

Eliminar el '.' dentro del atributo de extensión:

<profiles> 
    <add extension="htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> 
</profiles> 
+0

Esto justo aquí debería ser la respuesta correcta. – Prescient

+1

No, esto no es correcto. Probablemente lo haya conseguido porque tiene la sección '' definida en otro lugar. Cuando elimina el punto, esa extensión de agregado se vuelve inútil, lo que hace que la sección '' surta efecto. – chenz

+0

** ¡ESTO ES correcto! ** Acabo de probar esto "sabiendo" que no funcionaría porque, bueno, el ejemplo que IIS te da en la GUI para el Caché de resultados muestra que debes incluir el '.' antes de la extensión ... ** ¡Pero funcionó! ** Te lo aseguro, esta es la respuesta correcta para IIS 8 - mira aquí http://i66.tinypic.com/2e249af.png – Jimbo

0

intenta agregar esto a su web.config, se elimina por completo la cabecera Cache-Control para mí:

<system.Webserver> 
<staticContent> 
<clientCache cacheControlMode="NoControl" /> 
</staticContent> 
</system.Webserver> 
7

Lo que efectivamente se deshizo de no-cache para mí estaba añadiendo location="Any" al elemento add, que en su lugar escribe Cache-Control:public:

<caching enabled="false" enableKernelCache="false"> 
    <profiles> 
     <add extension=".htm" ... location="Any" /> 
    </profiles> 
</caching> 

En ausencia del location atributo, IIS tiene el valor predeterminado Cache-Control:no-cache. Otros valores posibles son Client, Downstream, Server o ServerAndClient. Detalles here.

+0

Grrr, eso 'detalles aquí' la página iis.net, le da su configuración de ejemplo '' que ** no ** incluye 'ubicación', lo que significaba que comencé a jurar en mi servidor web para hacer su trabajo correctamente y terminé aquí. – icc97

Cuestiones relacionadas