静态文件应缓存多长时间?

时间:2013-03-19 20:58:26

标签: caching amazon-s3 amazon-cloudfront

我想为某些Amazon S3文件设置浏览器缓存。我计划使用这个元数据:

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

等于一天。

我看到的很多例子都是这样的:

Cache-Control: max-age=3600

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

对于我很少更改的文件,应该缓存多长时间?

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

1 个答案:

答案 0 :(得分:2)

  

为什么只有3600?

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


  

为什么不使用must-revalidate?

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

  

当缓存具有要用作响应的陈旧条目时   对于客户端的请求,首先必须检查原始服务器   (或者可能是具有新响应的中间缓存)以查看是否   它的缓存条目仍然可用。


  

对于我很少更改的文件,应该缓存多长时间?

许多网络性能建议表示要在未来的缓存过期中设置很长时间,例如几年。这样,客户端浏览器只会下载一次数据,后续访问将从缓存中提供。这适用于“真正静态”的文件,例如Javascript或CSS。

另一方面,如果数据是动态的,但不会经常更改,则应根据特定方案设置合理的到期时间。您是否需要尽快向客户提供最新版本,或者是否可以提供过时的版本?你知道数据何时发生变化吗?等等。一小时或一天通常在服务器负载,客户端性能和数据新鲜度之间进行权衡取舍,但这取决于您的要求


  

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

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

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