背景
客户正在运行我们的网络应用。因为响应包含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}}。
我为此感到愚蠢(我想我可能是)?
答案 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
。其他可能的值包括Downstream
,Server
,ServerAndClient
或{{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>