输出缓存仍然添加Cache-Control:no-cache,即使它被禁用

时间:2010-11-17 13:02:44

标签: iis-7

背景

客户正在运行我们的网络应用。因为响应包含HTTP Cache-Control:no-cache指令,所以当他们试图查看PDF / Excel / word文件时,通过HTTPS并且正在运行到(相当熟知的)IE8“文件无法写入缓存”错误。问题是,我们的应用程序(或其配置)不是添加此指令。

经过一番调查后,我发现IIS7页面输出缓存功能也可以添加此标题,例如

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

会将Cache-Control:no-cache, private添加到响应标头中。

我的问题

但是令人惊讶的(IMO)事情就是,即使你应该禁用该功能(请参阅上面enabled="false"上面的配置代码段),仍然会发送响应标头{ {1}}。

我为此感到愚蠢(我想我可能是)?

4 个答案:

答案 0 :(得分:8)

为我有效摆脱no-cache的问题是将location="Any"添加到add元素,而Cache-Control:public代替<caching enabled="false" enableKernelCache="false"> <profiles> <add extension=".htm" ... location="Any" /> </profiles> </caching>

location

如果没有Cache-Control:no-cache属性,IIS默认为Client。其他可能的值包括DownstreamServerServerAndClient或{{1}}。详情here

答案 1 :(得分:5)

你并不孤单:http://forums.iis.net/t/1152306.aspx

我们也有同样的问题。我还没有找到关于这个“功能”的任何文档,所以我假设它是一个bug。

我们决定只删除缓存标记,而只使用clientCache标记。

答案 2 :(得分:4)

删除'。'在扩展属性中:

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

答案 3 :(得分:0)

尝试将此添加到您的web.config中,它完全删除了我的Cache-Control标头:

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