设置Expires和Cache-Control:max-age

时间:2012-09-30 04:30:11

标签: caching http-caching

有人可以澄清有关缓存的声明。

https://developers.google.com/speed/docs/best-practices/caching

  

指定ExpiresCache-Control: max-age,或指定Last-ModifiedETag都是多余的。

然后它说

  

指纹识别机制允许服务器将Expires标题设置为在请求日期之前一年; Last-Modified标题到上次修改文件的日期;以及Cache-Control: max-age标题为3153600

后一种说法与先前的说法相反 - 关于不设置ExpiresCache-Control

第一个陈述是常态,第二个是异常吗?或者这个文档是否违背了自己的建议?有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:12)

Http中的[Cache-Control:max-age]和[Expires]正在做同样的事情,这就是它们冗余的原因。 但它们之间仍然存在一些很大的差异,[Cache-Control]是http / 1.1标准,Expires是http / 1.0。如果客户端浏览器不支持http / 1.1 Cache-Control将被忽略,这就是为什么你可以同时使用它们的原因。

如果同时使用它们,[Cache-Control]具有优先权。 您可以在此处找到更多信息: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

答案 1 :(得分:2)

嗯...

我可以告诉你,第一个语句是正确的,因为你真的不需要指定[Expires] [Max-Age]标题,因为它们都做同样的事情(设置最长缓存时间)

同样适用于[Last Modify]和[Etag],因为两者都是新鲜度。

我同意似乎存在一些混淆,因为他们稍后给出的示例使用[Expires]和[Max-Age]标题。

乍一看,这看起来像某种文档错误。

仍然,你需要记住,虽然你没有 同时使用[Expires]和[Max-Age],你肯定可以同时使用它们,只要他们指向同一个日期 - 就像他们提供的例子一样。

总结:

第一个陈述谈论冗余(这不是必要的“坏”,可能“只是”浪费)。他们稍后给出的示例虽然没有经过优化,但不会引起任何问题。

只要您没有使用两个标题设置不同的到期日期,您就可以了。