HTTP中的缓存控制标头的最大值


80

我正在使用Amazon S3为我的网站提供静态资产。我想让浏览器尽可能长时间地缓存这些资产。我应该在资产中包含哪些元数据标头

Cache-Control: max-age=???

可能的最大年龄值取决于浏览器/版本以及所有代理的方式... AFAIK没有真正的标准/规格,因此任何值都将是猜测...
Yahia

Answers:


119

通常建议以一年为标准最大值。参见RFC 2616

为了将响应标记为“永不过期”,源服务器会从发送响应之日起大约一年后发送一个Expires日期。HTTP / 1.1服务器不应发送超过一年的过期日期。

尽管这适用于较旧的expires标准,但cache-control在没有任何明确的标准指导的情况下也同样适用。只要您通常仍然需要,只要选择任意更长的值可能会破坏某些用户代理。所以:

Cache-Control: max-age=31536000

22

考虑不要将其“尽可能长时间地”存储,而应尽可能合理地解决。例如,您不太可能需要将其缓存超过10年……对吗?

RFC在此处讨论最大年龄:http//www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

埃里克·劳伦斯(Eric Lawrence)说,在IE9之前,Internet Explorer会将具有Cache-Control的任何资源视为过期的:max-age值超过2147483648(2 ^ 31)秒,大约68年(http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx)。

当然,其他用户代理也会有所不同,因此...请尝试选择一个不太可能(而不是可能!)引起溢出的数字。超过31536000(一年)的最大年龄意义不大,非正式地,这被认为是合理的最大值。


我实际上正在寻找要发送的特定标头。我的网站内置了一种机制,如果我需要进行更改并使访问者看到它,则可以将文件的url更改为指向不同的文件名。我只需要发送特定标头的示例即可使浏览器无限期地缓存这些资产。
凯西·弗林

12
缓存控制:max-age = 31536000会将其缓存1年,这是建议的最大值。
EricLaw 2011年

2
@Geoffrey:我认为您对Casey的建筑感到困惑。他只是说他将在版本更改时更改他在标记中引用的URL。这是大多数热门网站使用的最佳做法。
EricLaw 2011年

@Geoffrey您确定是“超过2147483648”吗?我以为是“超过2147483647”?
Pacerier,2012年

4

创建最大1年缓存建议的人没有正确考虑。

首先,如果为访问者提供了过期的缓存文件,那么为什么在1年后突然加载新版本会对访问者有什么好处?从功能的角度来看,如果文件的TTL为1年,则显然意味着根本不打算更改该文件。

那么为什么一个人需要超过一年呢?

1)为什么不呢?告知访问者浏览器“没有任何目的”,“此文件已使用1年,请先检查一下是否已更新”。

2)CDN服务。大多数内容交付网络都使用缓存头来确定从边缘服务器有效地提供文件服务的时间。如果您对文件具有1年的缓存控制,它将在某个时候开始从原始服务器重新请求未更改的文件,并且边缘缓存将需要完全重新填充,这会导致客户端加载速度变慢,并且不必要调用原点。

最多拥有1年的意义是什么?哪些浏览器会阻塞高于31536000的数量?


3
1年是互联网时代的永恒。另外,如果您认真对待缓存,那么您将处理(除了缓存控制之外)最后修改和/或etag机制。因此,即使是一年后的重新请求也不会损害带宽(304未修改)
redben

2
当您的图像从未更改时(例如Internet上的大多数图像),并且您不希望CDN从原始位置刷新文件(那将毫无意义),则1年不是永恒的。至于最后修改的/ etag,当然会发起一个请求和客户端与服务器之间的对话,只是找出我们已经知道的“是的,它仍然可以提供缓存的文件”。您的论点基本上是“ 1年是互联网上的永恒”,这毫无用处。我已设定图片的有效期为10年,这只会带来更好的最终结果。
suncat100 2015年

3
哦,还有默认的浏览器缓存大小。任何缓存的资产都可以在浏览器缓存中保留一年吗?我不知道。
redben

极不可能。当试图将项目“永久”或“尽可能长的时间”缓存起来时,进一步证明设置“ 1年”毫无意义的事情是无意义的……
suncat100 2015年

它与浏览器缓存无关。它是关于中间代理缓存它如Akamai和光油和谷歌的移动代理等
以利亚林恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.