为什么?输出缓存自动禁用IIS 7.5中的浏览器缓存

Lon*_*est 5 iis-7.5 http-headers

在IIS 7.5中,当我没有启用输出缓存时,我的php脚本在Cache-Control标头中成功设置了浏览器缓存:

缓存控制:max-age = 43200,public
Content-Type:text/html
Expires:Wed,30 May 2012 22:15:18 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.4.3
日期:Wed,30 May 2012 10:15:18 GMT
Connection:close
Content-Length:5105

但是,如果我为.php文件启用输出缓存,我会得到以下标头:

Cache-Control:no-cache,max-age = 43200,public
Content-Type:text/html
Expires:Wed,30 May 2012 22:25:34 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.4.3
日期:星期三,2012 5月30日10点25分34秒GMT
连接:关闭

(在我的php脚本工作之前,注意"no-cache"被添加到Cache-Control中)

我发现,如果为文件类型启用了输出缓存,则无法阻止将"no-cache"添加到Cache-Control键.我试过在web.config文件中这样做:

        <customHeaders>
            <remove name="X-Powered-By" />
    <remove name="Cache-Control" />
            <add name="Cache-Control" value="public" />
        </customHeaders>
Run Code Online (Sandbox Code Playgroud)

这不起作用.为什么这必须如此相互排斥?我想同时启用输出缓存和浏览器缓存.

Mar*_*urg 8

遗憾的是,IIS管理器界面不允许您使用输出缓存模块支持的所有功能.其中一个功能是设置间接控制缓存控制头的缓存位置.您必须手动编辑web.config才能更改它.语法如下:

<caching>
    <profiles>
        <add extension=".php" ..... location="Any" />
    </profiles>
</caching>
Run Code Online (Sandbox Code Playgroud)

<add />标签将取决于你希望你的缓存工作有更多的选择.重要的是添加location="..."属性.支持以下值,它们控制缓存控制标头,如下所示:

AnyDownstream=public

ServerAndClientClient=private

None或者Server=空=no-cache

由于location默认情况下该属性不存在,因此IIS将Cache-Control: no-cache在启用输出缓存时默认发送标头.有关输出缓存和支持的功能的更多信息,请参见:IIS7中的响应缓存