【问题标题】:Why? Output Caching Automatically Disables Browser Caching in IIS 7.5为什么?输出缓存自动禁用 IIS 7.5 中的浏览器缓存
【发布时间】:2012-06-04 14:04:44
【问题描述】:

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

缓存控制:max-age=43200,public
内容类型:text/html
到期:格林威治标准时间 2012 年 5 月 30 日星期三 22:15:18
服务器:Microsoft-IIS/7.5
X-Powered-By:PHP/5.4.3
日期:格林威治标准时间 2012 年 5 月 30 日星期三 10:15:18
连接:关闭
内容长度:5105

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

缓存控制:no-cache,max-age=43200,public
内容类型:text/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>

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

【问题讨论】:

    标签: http-headers iis-7.5


    【解决方案1】:

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

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

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

    AnyDownstream = public

    ServerAndClientClient = private

    NoneServer 或空 = no-cache

    由于location 属性默认不存在,IIS 将默认在启用输出缓存时发送Cache-Control: no-cache 标头。有关输出缓存和支持的功能的更多信息,请访问:Response caching in IIS7

    【讨论】:

    • 你太棒了。添加位置属性解决了我的问题。我不能感谢你。非常感谢!
    • 您对添加动态 Expires http 标头有什么建议吗?见这里:stackoverflow.com/questions/10825497/…
    • 单独回答了这个问题。
    • 多年后,你拯救了我的理智和我的其他日程安排......谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2012-03-28
    • 2012-01-05
    • 2018-08-30
    • 1970-01-01
    • 2012-03-12
    • 2018-06-29
    相关资源
    最近更新 更多