HTTP中caching控制头的最大值

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

Cache-Control: max-age=??? 

通常build议一年为标准最大值。 请参阅RFC 2616 :

为了将响应标记为“永不过期”,源服务器从响应发送时间起大约一年后发送过期date。 HTTP / 1.1服务器不应该在将来发送超过一年的过期date。

虽然这适用于较旧的expires标准,但是在没有任何明确的标准指导的情况下也适用于cache-control 。 只要你一般都需要,任意select任意长度的值都可能破坏一些用户代理。 所以:

 Cache-Control: max-age=31536000 

考虑不要把它存储为“尽可能长”,而是只要合理的解决。 例如,你不太可能需要caching超过10年的时间…我是对的吗?

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

埃里克·劳伦斯(Eric Lawrence)说,在IE9之前,IE浏览器将视为过时的caching控制:超过2147483648(2 ^ 31)秒,大约68年( http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx )。

其他用户代理当然会有所不同,所以…尝试select一个不太可能(而不是可能!)的数字来引起溢出。 最大年龄大于31536000(一年)是没有意义的,非正式的这被认为是一个合理的最大值。

创build最多1年cachingbuild议的人没有正确的想法。

首先,如果一个访问者被提供了一个过期的caching文件,那么为什么在1年后突然加载一个新版本会有什么好处呢? 如果一个文件有1年的TTL,从function的angular度来看,这显然意味着该文件不打算被改变。

那么为什么需要一年以上呢?

1)为什么不呢? 它没有任何目的告诉访问者浏览器“嘿,这个文件是1岁,这可能是一个想法,检查是否已经更新”。

2)CDN服务。 大多数内容交付networking使用caching头来决定从边缘服务器有效提供文件的时间。 如果你对这些文件有一年的caching控制,它将在某一时刻开始重新从原始服务器请求未更改的文件,并且边缘caching将需要被完全重新填充,从而导致对客户端的较慢加载,并且不必要的呼叫原点。

最多1年的意义何在? 哪些浏览器会在高于31536000的情况下窒息?