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

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

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

另一个解决方案是将缓存控制:max-age设置为某个值。这个工作吗?它被主要浏览器接受吗?我会破坏一些缓存算法吗?为什么YSLOW建议将到期的标题设置而不是CACHE-CONTROL:MAX-AGE?

还有其他建议吗?我们正在使用合理的精灵来压缩CS和JS,将其设置在可能的地方和ETAGS时,并将很快使用Yahoo压缩工具和GZIPPICK OUTPOUPT压缩我们的图像。

有帮助吗?

解决方案

我们对自己进行了一些研究。好像缓存控制标头确实有助于告诉CloudFront或代理设置有效的到期标头,但有时只是...

我们目前正在编写CRON工作,以定期更新S3中的所有标题,因为这是肯定可以使用的一件事。似乎没有其他方法。如果有的话,我会及时通知您。

其他提示

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

你说 :

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

对我来说意味着您的资源 绝不 改变。为什么不将标题设置为遥远的将来的日期(例如,01/01/2020)?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top