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

Chr*_*ell 10 iis-7

背景

客户正在运行我们的Web应用程序.因为响应包含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>
Run Code Online (Sandbox Code Playgroud)

将具有添加Cache-Control:no-cache, private到响应标头的效果.

我的问题

但令人惊讶的(IMO)事情是,即使您假定禁用该功能(请参阅我上面的配置代码段enabled="false"),仍会发送响应标头Cache-Control:no-cache, private.

我是多么愚蠢而对此感到惊讶(我想我可能是)?

Tod*_*ier 8

有效地摆脱了什么no-cache对我来说是增加location="Any"add元素,这反而写道Cache-Control:public:

<caching enabled="false" enableKernelCache="false">
    <profiles>
        <add extension=".htm" ... location="Any" />
    </profiles> 
</caching>
Run Code Online (Sandbox Code Playgroud)

如果没有该location属性,IIS默认为Cache-Control:no-cache.其他可能的值是Client,Downstream,Server,或ServerAndClient.细节在这里.


jCo*_*son 5

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

我们也遇到了同样的问题.我没有找到任何关于这个"功能"的文档,所以我假设它是一个bug.

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