Caching 使用Cloudfront时,如何设置相对于当前日期的Expires标头?

Caching 使用Cloudfront时,如何设置相对于当前日期的Expires标头?,caching,http-headers,cdn,amazon-cloudfront,pagespeed,Caching,Http Headers,Cdn,Amazon Cloudfront,Pagespeed,我们正在开发一个大型网站,我们所有的图片和资源都在AmazonS3中。我们还使用Cloudfront在全球范围内分发我们的内容。我们想要做的是告诉客户端Web浏览器缓存我们的文件,因为当我们更改文件时,我们也会更改URL(Cloudfront在其他地方24小时内不会反映更改) 我们目前正在使用ETag,但这不是最佳的,因为客户端仍然需要执行请求以检查资源是否已更改 一种解决方案是Expires头,但是我们没有找到一种方法来设置它相对于当前日期,就像在Apache S3配置中可能的那样,并且我们不

我们正在开发一个大型网站,我们所有的图片和资源都在AmazonS3中。我们还使用Cloudfront在全球范围内分发我们的内容。我们想要做的是告诉客户端Web浏览器缓存我们的文件,因为当我们更改文件时,我们也会更改URL(Cloudfront在其他地方24小时内不会反映更改)

我们目前正在使用ETag,但这不是最佳的,因为客户端仍然需要执行请求以检查资源是否已更改

一种解决方案是Expires头,但是我们没有找到一种方法来设置它相对于当前日期,就像在Apache S3配置中可能的那样,并且我们不能定期更新所有内容,因为它非常复杂。因此,我们需要一个配置选项,将Expires头设置为相对于所有内容的当前日期的日期

另一个解决方案是将缓存控制:max age设置为某个值。这行吗?它被主流浏览器接受吗?我会用这个破坏一些缓存算法吗?为什么YSlow建议设置Expires标头而不是缓存控制:max age


还有其他建议吗?我们正在压缩CSS和JS,在可能的地方使用Sprites,在可能的地方设置Expires头和ETag,并将很快使用Yahoo压缩工具和Gzip输出压缩我们的图像。

我们自己做了一些研究。似乎缓存控制头确实有助于告诉Cloudfront或代理设置有效的Expires头,但只是有时


我们目前正在编写一个Cron作业来定期更新S3中的所有头,因为这是一件可以肯定的事情。看来没有别的办法了。如果有,我会随时通知您。

为什么需要缓存持续时间相对于当前日期

你说:

“当我们更改它们时,我们还将更改URL”


对我来说,这意味着你的资源永远不会改变。那么为什么不将Expires标题设置为一个遥远的未来日期(例如,2020年1月1日)?

嗨,保罗,我也有同样的问题,你有更好的解决方案吗?没有,恐怕没有更好的解决方案。@PaulWeber你能分享一下你做过的事情的要点吗?我还需要做类似的事情对不起,但我现在在另一家公司工作,再也无法访问脚本。但是如果你有你的文件列表,这应该很容易。好主意。我不知道为什么我们放弃了这个解决方案,但我认为这是因为如果过期日期太远,一些浏览器或代理会忽略它。我们目前让我们的内容在1年内到期,这是可行的,但我们可能会尝试增加。第14.21节说,“要将响应标记为‘永不过期’,源服务器将在发送响应后大约一年发送过期日期。HTTP/1.1服务器今后发送过期日期不应超过一年。”我不知道这在实践中是否真的是个问题。缓存现在终于过期了!:”