几周前,亚马逊宣布降低了内容的有效期:
如此之多,您现在实际上可以将CloudFront中的TTL设置为0。所以我的问题是,为什么将TTL设置为0的CloudFront分配很有用。对我来说,这意味着根本不缓存,因此每个到达CloudFront的请求最终会碰到原点。
我想念什么?
几周前,亚马逊宣布降低了内容的有效期:
如此之多,您现在实际上可以将CloudFront中的TTL设置为0。所以我的问题是,为什么将TTL设置为0的CloudFront分配很有用。对我来说,这意味着根本不缓存,因此每个到达CloudFront的请求最终会碰到原点。
我想念什么?
Answers:
实际上,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上下文中应用时。
CloudFront可以与证书管理器结合使用,以向S3网站添加HTTPS支持。您可能需要这样做,但是零缓存。
另一个用例是,如果您想使用lambda edge https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge来处理对不可缓存内容的请求的标头。 html。实例x-api-key
。