我们正在开发一个大型网站,我们所有的图像和资源都在 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 压缩我们的图像。