在 IIS 7.5 中,当我没有启用输出缓存时,我的 php 脚本成功地在 Cache-Control header 中设置了浏览器缓存:
缓存控制:max-age=43200,public
内容类型:文本/html
到期:2012 年 5 月 30 日星期三 22:15:18 GMT
服务器:Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
日期:格林威治标准时间 2012 年 5 月 30 日星期三 10:15:18
连接:关闭
内容长度:5105
但是,如果我为 .php 文件启用输出缓存,我会得到以下 header :
缓存控制:无缓存,最大年龄=43200,公共(public)
内容类型:文本/html
到期:格林威治标准时间 2012 年 5 月 30 日星期三 22:25:34
服务器:Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
日期:格林威治标准时间 2012 年 5 月 30 日星期三 10:25:34
连接:关闭
(注意“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>
那是行不通的。为什么这必须如此相互排斥?我想同时启用输出缓存和浏览器缓存。
最佳答案
不幸的是,IIS 管理器界面不允许您使用输出缓存模块支持的所有功能。这些功能之一是设置间接控制缓存控制 header 的缓存位置。您必须手动编辑您的 web.config 才能更改它。语法如下:
<caching>
<profiles>
<add extension=".php" ..... location="Any" />
</profiles>
</caching>
<add />
标记将有更多选项,具体取决于您希望缓存如何工作。重要的部分是添加 location="..."
属性。支持以下值,它们控制缓存控制 header ,如下所示:Any
或 Downstream
= public
ServerAndClient
或 Client
= private
None
或 Server
或为空 = no-cache
作为
location
属性默认不存在,IIS 默认发送 Cache-Control: no-cache
启用输出缓存时的 header 。有关输出缓存和支持的功能的更多信息,请访问:Response caching in IIS7
关于http-headers - 为什么?输出缓存自动禁用 IIS 7.5 中的浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814564/