【问题标题】:what’s the difference between Expires and Cache-Control headers?Expires 和 Cache-Control 标头有什么区别?
【发布时间】:2011-08-13 13:58:48
【问题描述】:

ExpiresCache-Control 标头有什么区别?

【问题讨论】:

    标签: http-headers cache-control


    【解决方案1】:

    Cache-Control 是在 HTTP/1.1 中引入的,它提供了比Expires 更多的选项。它们可以用来完成同样的事情,但 Expires 的数据值是 HTTP 日期,而 Cache-Control max-age 允许您指定相对时间量,因此您可以指定“请求页面后的 X 小时”。

    HTML Cache control 是一个非常相似的问题,并且有一个很好的链接到缓存教程,该教程应该可以回答您的大部分问题(例如,http://www.mnot.net/cache_docs/#EXPIRES)。总而言之,Expires 推荐用于静态资源(如图像)和Cache-Control,当您需要更多地控制缓存的完成方式时。

    【讨论】:

    • 值得一提的是缓存控制是所有浏览器都将使用的,但指定两个标头以防万一有旧代理阻碍。
    • 使用服务redbot.org(也由Mark Nottingham,他编写了上面答案中引用的缓存文章)来检查缓存标头的正确使用。
    • 此外:“当 Cache-Control 和 Expires 都存在时,Cache-Control 优先。” -- mnot.net/cache_docs/
    【解决方案2】:

    如果您使用的是 CDN(云交付网络),我建议您使用 Cache-Control,其最大使用时间以秒为单位。例如缓存控制:max-age=604800。 这可以防止对您的源服务器的请求高峰:使用“Expires Wed, 30 Oct 20xx 04:37:07 GMT”所有浏览器将同时请求您。

    【讨论】:

    • Apache(可能还有很多服务器)通常使用请求文件的时间+您指定的超时来设置到期日期。由于此日期使用秒数,因此您的情况不太可能,并且行为与cache-control 相同。所以我不明白为什么使用Expires:时会出现请求峰值
    【解决方案3】:

    根据这篇 Google Developers 文章,HTTP Caching

    Cache-Control 标头被定义为 HTTP/1.1 规范的一部分 并取代以前用于定义响应的标头(例如 Expires) 缓存策略。所有现代浏览器都支持 Cache-Control,因此 这就是我们所需要的。

    【讨论】:

    • 不仅所有现代浏览器都支持它——它们也应该支持它,就像在规范中一样:“如果响应包含 Expires 标头和 max-age 指令,则 max-age 指令将覆盖Expires 标头,即使 Expires 标头更具限制性” [w3.org/Protocols/rfc2616/rfc2616-sec14.html]
    【解决方案4】:

    Cache-Control 是在 HTTP/1.1 中定义的,告诉从服务器到客户端的所有缓存机制是否可以缓存该对象。它以秒为单位:Cache-Control: max-age=3600

    Expires 标头字段给出了响应被视为过时的日期/时间。 Expires 值是一个 HTTP 日期时间戳:Expires: Tue, 18 Jul 2017 16:07:23 GMT

    如果响应包含带有max-age 指令的Cache-Control 字段,则收件人必须忽略Expires 字段。

    【讨论】:

      【解决方案5】:

      Heroku 开发中心对此主题有一个 excellent article

      引用自它,

      虽然 Cache-Control 标头打开客户端缓存并设置资源的 max-age,但 Expires 标头用于指定资源不再有效的特定时间点。

      【讨论】:

        【解决方案6】:

        除了 CC 的私有/公共选项外,我看不出有任何区别。当使用“访问加 1 年/月/周/天”之类的 Expires 时,它的工作方式与 CC 完全相同。

        【讨论】:

        • 您愿意解释一下否决票吗?我在 Chrome、Safari 和 Firefox 中做了一些广泛的测试。 Cache Control 有一些选项在使用 expires 时不可用,但出于所有实际目的,两者的工作方式完全相同。
        【解决方案7】:

        如果你还有兴趣,我直接从谷歌的男孩那里留下这个推荐。 https://developers.google.com/speed/docs/insights/LeverageBrowserCaching 他们更喜欢 Expires before 而不是 Cache-Control

        【讨论】:

        • 您确定他们更喜欢 Expires 而不是 Cache-Control?我读到覆盖是相反的,至少对于 Firefox。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
        • 目前,该页面提到“已弃用。此页面是为 PageSpeed Insights API 的第 4 版编写的,该版本已弃用,将于 2019 年 5 月关闭。第 5 版是最新的,提供了真正的- 来自 Chrome 用户体验报告的世界数据和来自 Lighthouse 的实验室数据。”
        猜你喜欢
        • 2011-08-22
        • 2015-01-17
        • 2011-12-08
        • 2012-05-06
        • 2011-03-04
        • 2011-11-26
        • 2011-07-23
        • 1970-01-01
        相关资源
        最近更新 更多