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

时间:2011-08-15 22:58:27

标签: http caching http-headers cache-control

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

Cache-Control: max-age=???

3 个答案:

答案 0 :(得分:92)

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

  

要将响应标记为“永不过期”,原始服务器会发送一个   到期日期约为响应时间的一年   发送。 HTTP / 1.1服务器不应该发送多个过期日期   未来一年。

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

Cache-Control: max-age=31536000

答案 1 :(得分:19)

考虑不要“尽可能长时间”存储它,而是在合理的时间内解决。例如,您不太可能需要将其缓存超过10年......我是对的吗?

RFC在此处讨论了max-age: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)。< / p>

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

答案 2 :(得分:1)

创建最长1年缓存建议的人并没有认真考虑。

首先,如果访问者正在为一个过时的缓存文件提供服务,那么为什么它会在1年后突然加载一个新版本提供任何好处?如果文件具有1年TTL,从功能角度来看,这显然意味着该文件根本不会被更改。

那么为什么需要1年以上?

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

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

最多1年有什么意义?什么浏览器会在高于31536000的金额上窒息?