设置Expires和Cache-Control:max-age

99m*_*les 4 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.

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

谢谢.

Mil*_*lov 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


Iga*_*man 2

出色地...

我可以告诉您,第一个语句是正确的,因为您确实不需要同时指定 [Expires][Max-Age] 标头,因为它们都执行相同的操作(设置缓存的最大周期)

[Last Modify] 和 [Etag] 也是如此,因为它们都涉及新鲜度。

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

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

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

总结一下:

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

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