我想为某些Amazon S3文件设置浏览器缓存。我计划使用这个元数据:
Cache-Control: max-age=86400, must-revalidate
等于一天。
我看到的很多例子都是这样的:
Cache-Control: max-age=3600
为什么只有3600,为什么不使用必须重新验证?
对于我很少更改的文件,应该缓存多长时间?
如果我更新文件并需要立即查看该更新会发生什么情况,但其缓存不会再过期5天?
答案 0 :(得分:2)
为什么只有3600?
假设因为该特定示例的作者认为该页面的一小时是适当的缓存超时。
为什么不使用must-revalidate?
如果响应不包含严格遵循您设置的缓存规则的信息,则省略must-revalidate理论上可以确保通过缓存传递更多请求。有关详细信息,请参阅this answer,最相关的部分来自HTTP规范:
当缓存具有要用作响应的陈旧条目时 对于客户端的请求,首先必须检查原始服务器 (或者可能是具有新响应的中间缓存)以查看是否 它的缓存条目仍然可用。
对于我很少更改的文件,应该缓存多长时间?
许多网络性能建议表示要在未来的缓存过期中设置很长时间,例如几年。这样,客户端浏览器只会下载一次数据,后续访问将从缓存中提供。这适用于“真正静态”的文件,例如Javascript或CSS。
另一方面,如果数据是动态的,但不会经常更改,则应根据特定方案设置合理的到期时间。您是否需要尽快向客户提供最新版本,或者是否可以提供过时的版本?你知道数据何时发生变化吗?等等。一小时或一天通常在服务器负载,客户端性能和数据新鲜度之间进行权衡取舍,但这取决于您的要求。
如果我更新文件并需要立即查看该更新会发生什么情况,但其缓存不会再过期5天?
为文件指定新名称,或在查询字符串中附加值。您当然需要更新所有链接。这是静态资源需要更改时的一般方法。
此外,here is a nice overview可用的缓存控制属性。