8

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

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

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

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

还有其他建议吗?我们正在压缩 CSS 和 JS,在合理的地方使用 Sprites,在可能的地方设置 Expires 标头和 ETag,并且很快将使用 Yahoo Compression Tool 和 gzipping Output 压缩我们的图像。

4

2 回答 2

3

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

我们目前正在编写一个 Cron 作业来定期更新 S3 中的所有标头,因为这是肯定有效的一件事。好像没有别的办法了。如果有,我会及时通知你。

于 2011-02-16T11:34:23.930 回答
2

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

你说 :

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

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

于 2012-09-25T20:00:00.923 回答