5

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

Cache-Control: max-age=43200,public
Content-Type: text/html
Expires: Wed, 30 May 2012 22:15:18 GMT
服务器: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
日期:星期三,2012 年 5 月 30 日 10:15:18 GMT
连接:关闭
内容长度:5105

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

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

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

我发现,如果为文件类型启用了输出缓存,则无法防止将“无缓存”添加到 Cache-Control 键中。我试图在 web.config 文件中做到这一点:

        <customHeaders>
            <remove name="X-Powered-By" />
    <remove name="Cache-Control" />
            <add name="Cache-Control" value="public" />
        </customHeaders>

那是行不通的。为什么这必须如此相互排斥?我想同时启用输出缓存和浏览器缓存。

4

1 回答 1

9

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

<caching>
    <profiles>
        <add extension=".php" ..... location="Any" />
    </profiles>
</caching>

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

AnyDownstream=public

ServerAndClientClient=private

NoneServer或 空 =no-cache

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

于 2012-05-30T22:03:18.177 回答