静态文件应该保存多久?

问题描述:

我想为某些Amazon S3文件设置浏览器缓存。我打算使用这个元数据:静态文件应该保存多久?

Cache-Control: max-age=86400, must-revalidate 

这等于一天。

许多我看到像这样的例子:

Cache-Control: max-age=3600 

为什么只有3600,为什么不使用必重新验证?

对于一个我很少改变的文件,它应该被缓存多长时间?

如果我更新文件并需要立即看到更新,但其缓存不会过期5天,会发生什么情况?

为什么只有3600?

假设是因为该特定示例的作者确定一小时是该页面的适当缓存超时。


为什么不使用必重新验证?

如果响应中不包含严格遵循您设置的缓存规则所需的信息,则省略must-revalidate可以在理论上确保通过缓存传递更多的请求。见this answer的细节,最相关的部分来自HTTP规范是:

当缓存有一个陈旧的条目,它希望作为响应 到客户端的请求中使用,它首先必须检查与原始服务器 (或者可能是具有新鲜响应的中间缓存)以查看其缓存条目是否仍然可用 。


对于我很少更改的文件,多久它应该被缓存?

许多网络性能建议表示,将在未来的缓存过期中设置很长的时间,比如几年。这样,客户端浏览器将只下载一次数据,随后的访问将从缓存中提供。这适用于“真正静态”的文件,比如Javascript或CSS。另一方面,如果数据是动态的,但不会经常更改,则应根据您的特定方案设置合理的过期时间。您需要在客户可用时立即向客户提供最新版本,还是可以提供陈旧的版本?你知道数据何时改变吗?等等一小时或一天通常在服务器负载,客户端性能和数据新鲜度之间进行适当的折衷,但它取决于您的要求的


如果我更新的文件,并需要一个更新立即可见,但其高速缓存未过期另外5日内完成?

为文件指定一个新名称,或将值附加到查询字符串中。您当然需要更新所有链接。这是静态资源需要改变时的一般方法。

此外,here is a nice overview的缓存控制属性可供您使用。

+0

谢谢。如果缓存没有设置一周,gtmetrix.com将惩罚你。这似乎很长一段时间。 – 4thSpace 2013-03-19 21:20:26