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

时间:2011-01-21 15:20:34

标签: caching http-headers cdn amazon-cloudfront pagespeed

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

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

一个解决方案是Expires Header,但我们没有找到一种方法来设置它相对于当前日期,就像在Apache Configuration for S3中一样,我们无法定期更新所有内容,因为它非常多。因此,我们需要一个配置选项,将Expires Header设置为相对于所有内容的当前日期的日期。

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

任何其他建议书?我们正在压缩CSS和JS,在可能的情况下使用Sprites,在可能的地方设置Expires头和ETag,并且很快将使用Yahoo压缩工具和gzipping输出压缩我们的图像。

2 个答案:

答案 0 :(得分:3)

我们对自己做了一些研究。看起来像Cache-Control Header确实有助于告诉Cloudfront或代理设置有效的Expires标头,但有时只是...

我们目前正在编写一个Cron作业来定期更新S3中的所有标题,因为这是一件肯定的事情。似乎没有其他办法。如果有,我会告诉你。

答案 1 :(得分:2)

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

你说:

  

“当我们更改它们时,我们也会更改网址”

对我来说意味着您的资源从不更改。为什么不将Expires Header设置为远期的未来日期(例如01/01/2020)?