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

标签 http-headers iis-7.5

在 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 ,如下所示:
AnyDownstream = publicServerAndClientClient = privateNoneServer或为空 = 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/

相关文章:

python - 使用python在sharepoint上上传文件会导致上传的文件在内容中保留标题

go - 设置静态头,避免分配?

node.js - 将cookie文件传入curl请求nodejs

python - 从Django加载CSS和JS到IIS7有什么问题?

php - 在 IIS 7.5 上运行 PHP/MySQL 的分步指南

web-services - 访问 Web 服务时出现 Http 502 Bad Gateway 错误

http - 元 http-equiv - 它是作为 HTTP header 的一部分发送的,还是客户端解析元标记的正文?

http - 如何在不声明过期的情况下强制浏览器获取新 header ?

c#-4.0 - OpenRasta w/.Net 4.0 在 Win 7 64 和 IIS7.5 下运行

asp.net-mvc-4 - 将 WebApp 用户(Windows 身份验证)委派给 MVC Web API 失败