【发布时间】:2011-08-13 13:58:48
【问题描述】:
Expires 和 Cache-Control 标头有什么区别?
【问题讨论】:
标签: http-headers cache-control
Expires 和 Cache-Control 标头有什么区别?
【问题讨论】:
标签: http-headers cache-control
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,当您需要更多地控制缓存的完成方式时。
【讨论】:
如果您使用的是 CDN(云交付网络),我建议您使用 Cache-Control,其最大使用时间以秒为单位。例如缓存控制:max-age=604800。 这可以防止对您的源服务器的请求高峰:使用“Expires Wed, 30 Oct 20xx 04:37:07 GMT”所有浏览器将同时请求您。
【讨论】:
cache-control 相同。所以我不明白为什么使用Expires:时会出现请求峰值
根据这篇 Google Developers 文章,HTTP Caching:
Cache-Control 标头被定义为 HTTP/1.1 规范的一部分 并取代以前用于定义响应的标头(例如 Expires) 缓存策略。所有现代浏览器都支持 Cache-Control,因此 这就是我们所需要的。
【讨论】:
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 字段。
【讨论】:
Heroku 开发中心对此主题有一个 excellent article。
引用自它,
虽然 Cache-Control 标头打开客户端缓存并设置资源的 max-age,但 Expires 标头用于指定资源不再有效的特定时间点。
【讨论】:
除了 CC 的私有/公共选项外,我看不出有任何区别。当使用“访问加 1 年/月/周/天”之类的 Expires 时,它的工作方式与 CC 完全相同。
【讨论】:
如果你还有兴趣,我直接从谷歌的男孩那里留下这个推荐。 https://developers.google.com/speed/docs/insights/LeverageBrowserCaching 他们更喜欢 Expires before 而不是 Cache-Control
【讨论】: