81

几周前,亚马逊宣布他们已经降低了内容的有效期:

Amazon CloudFront 降低了最短内容过期时间

如此之多,以至于您现在实际上可以将 CloudFront 中的 TTL 设置为 0。所以我的问题是,为什么将 TTL 设置为 0 的 CloudFront 分配很有用。对我来说,这意味着根本没有缓存,因此每个到达 CloudFront 的请求最终会击中原点。

我错过了什么?

4

4 回答 4

173

Amazon CloudFront的这一新功能实际上对许多用例都非常有用,因为命中源的工作方式与乍一看有点不同,而且不一定是问题,相反;虽然此功能已较早发布,但它与最近发布的Amazon CloudFront - Support for Dynamic Content结合在一起,例如针对手头的问题:

可变生存时间 (TTL) - 在许多情况下,动态内容要么不可缓存,要么在很短的时间内(可能只有几秒钟)可缓存。过去,CloudFront 的最短 TTL 为 60 分钟,因为所有内容都被认为是静态的。新的最小 TTL 值为 0 秒。如果您将特定源的 TTL 设置为 0,CloudFront 仍将缓存来自该源的内容。然后,它将发出一个带有 If-Modified-Since 标头的 GET 请求,从而使源有机会表明 CloudFront 可以继续使用缓存的内容(如果它在源处没有更改)[强调我的]

换句话说,使用 0 的 TTL 主要意味着 CloudFront 将缓存控制的权限委托给源,即源服务器决定 CloudFront 是否缓存对象以及是否缓存对象多长时间;请特别注意,带有 If-Modified-Since 标头的 GET 请求并不一定意味着对象本身是从源检索的,而是源可以(并且应该)返回HTTP 状态代码 304 -适用时未修改

表示资源自上次请求后未修改。[...] 使用它可以节省服务器和客户端的带宽和重新处理,因为与服务器重新处理的整个页面相比,只有标题数据必须发送和接收,然后使用更多带宽再次发送服务器和客户端的。 [强调我的]

有关 HTTP 缓存控制的机制和好处的详细信息,请参阅 Mark Nottingham 的出色缓存教程,这是 HTTP 体系结构中非常重要且有效的部分。

了解所有这些部分如何协同工作确实有点困难,因此在指定对象在 CloudFront 边缘缓存中停留多长时间(对象过期)中指定CloudFront 缓存对象以进行下载分配的最短时间部分中的表格试图总结效果当在 CloudFront 的上下文中应用时,有或没有 TTL = 0。

于 2012-05-16T15:47:59.620 回答
5

请注意,亚马逊不是说“TTL 为 0”,而是说“最小 TTL 为 0”。这是非常不同的。上面的描述非常可取,但不能保证 Cloudfront 确实做到了。

根据我现在的经验,我可以看到缓存的图像在边缘停留了几分钟,而我的原点已经改变了。

所以,我认为说“最小 TTL 为 0”可能更像是“亚马逊没有严格的意图将其保存在缓存中”,也许“它会经常重新获取”。

对于网络用户发布新内容的 CMS 等应用程序,我认为 TTL-0 仍然不够。您仍然必须从 CMS 调用失效,或者为不同的版本号使用不同的路径。

于 2015-01-26T21:23:48.997 回答
2

CloudFront 可以与证书管理器结合使用,为 S3 网站添加 HTTPS 支持。您可能想要这个,但零缓存。

于 2018-04-26T14:42:18.837 回答
0

另一个用例是如果您想使用 lambda 边缘https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge 操作不可缓存内容请求的标头。 .html _ 例子x-api-key

于 2020-06-18T21:32:01.807 回答