5

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

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

Expires同时指定andCache-Control: max-age或同时指定Last-Modifiedand是多余的ETag

然后后来它说

指纹机制允许服务器将Expires标头设置为比请求日期提前一年;Last-Modified文件最后修改日期的标题;和Cache-Control: max-age标题到3153600.

后一种说法与前面的说法背道而驰——关于不同时设置Expiresand Cache-Control

第一个陈述是规范,第二个陈述是例外吗?或者这个文档只是违背了它自己的建议?有什么建议?

谢谢。

4

2 回答 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

于 2013-07-30T08:42:05.273 回答
2

出色地...

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

[Last Modify] 和 [Etag] 也是如此,因为它们都解决了新鲜度问题。

我同意似乎有些混乱,因为他们稍后给出的示例同时使用了 [Expires] 和 [Max-Age] 标头。

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

不过,您需要记住,虽然您不必同时使用[Expires] 和 [Max-Age],但您当然可以同时使用它们,只要它们指向相同的日期 - 就像在示例中它们一样提供。

总结一下:

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

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

于 2012-10-02T14:50:14.573 回答