CloudFront中的TTL 0有什么用?


80

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

Amazon CloudFront缩短了最小内容到期时间

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

我想念什么?

Answers:


166

实际上,Amazon CloudFront的这一新功能在许多用例中都非常有用,因为击中原点的工作方式与乍看之下有所不同,并且不一定是问题,相反;尽管此功能已经在较早的版本中发布,但所有功能都与最新版本的Amazon CloudFront-动态内容支持一起提供,例如针对当前问题:

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

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

指示自上次请求以来尚未修改资源。[...] 使用此方法可以节省带宽并在服务器和客户端上进行重新处理,因为与服务器正在重新处理的整个页面相比,仅头数据必须发送和接收,然后使用更大的带宽再次发送服务器和客户端。 [强调我的]

参见Mark Nottingham出色的缓存教程HTTP缓存控制的机制和优点的详细信息,,HTTP缓存控制是HTTP体系结构中非常重要和有效的一部分。

确实很难理解所有这些部分是如何协同工作的,因此,指定CloudFront为下载分发中的对象分配对象的最短时间部分中的表指定多久一个CloudFront的边缘缓存(对象过期)物体会呆在试图概括的影响特别是在带或不带TTL = 0的CloudFront上下文中应用时。


3
这是一个了不起的回应。得到它了!
jatorre 2012年

3
谢谢史蒂芬!绝对彻底且写得很好的答案。AWS应该将此放入其DOCS中!!!哈!
asherrard 2015年

2
很好解释。说真的 +10为简单性和使用的术语。
Shivkumar Mallesappa,

5

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

以我目前的经验,我可以看到缓存的图像在边缘处停留了几分钟,而我的来源已经改变了。

因此,我认为说“最小TTL为0”可能更像是“亚马逊没有严格意图将其保留在缓存中”,也许是“并且它会经常重载”。

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


2

CloudFront可以与证书管理器结合使用,以向S3网站添加HTTPS支持。您可能需要这样做,但是零缓存。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.