同时设置Expires和Cache-Control:max-age的含义及作用是什么?

5
有人能解释一下关于缓存的这个声明吗? 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个回答

13
在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

2

好的...

我可以告诉你第一个陈述是正确的,因为你不需要同时指定[过期时间]和[最大年龄]标头,因为它们都执行相同的操作(设置缓存的最大期限)。

对于[上次修改]和[Etag]也是一样的,因为它们都关注新鲜度。

我同意似乎存在一些混淆,因为他们后来给出的示例使用了[过期时间]和[最大年龄]标头。

乍一看,这似乎是某种文档错误。

尽管如此,您需要记住,虽然您不必同时使用[过期时间]和[最大年龄],但只要它们指向相同的日期-就像他们提供的示例一样-您肯定可以同时使用它们。

总结一下:

第一个声明谈论了冗余(这并不一定是“坏”的,有时只是浪费),虽然后面给出的示例没有进行优化,但不会引起任何问题。

只要您不使用两个标头设置不同的到期日期,您就会没事。


“冗余不是坏事”加一。可能他们这样做是为了针对每一个可能的客户,以防其中一个标题无法使用。 - user123444555621

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接