gpt4 book ai didi

amazon-web-services - 什么是 Cloudfront 最小 TTL?

转载 作者:行者123 更新时间:2023-12-03 09:47:43 25 4
gpt4 key购买 nike

我想了解 Minimum TTL , Maximum TTLDefault TTL有了这个 document .

据我了解,Maximum TTL用于 HTTP cache header出现在响应限制最大缓存时间和 Default TTL当没有 HTTP cache header 时使用用作默认缓存时间。

但是,对于 Maximum TTL ,没有具体提及。

另外,它提到了与转发头的关系。这是否意味着如果我将任何 HTTP header 设置为转发到源和 Minimum TTL不是 0,它不缓存任何东西?

Minimum TTL Specify the minimum amount of time, in seconds, that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The default value for Minimum TTL is 0 seconds.

Important

. If you configure CloudFront to forward all headers to your origin for a cache behavior, CloudFront never caches the associated objects. Instead, CloudFront forwards all requests for those objects to the origin. In that configuration, the value of Minimum TTL must be 0.

最佳答案

在决定是否缓存对象以及缓存多长时间时,CloudFront 使用以下逻辑:

检查是否有任何 Cache-Control具有以下值的响应 header :

  • no-cache
  • no-store
  • private

  • 如果遇到其中任何一个,请停止并将对象的 TTL¹ 设置为配置值 最小 TTL .非零值意味着 CloudFront 将缓存它不会缓存的对象。

    否则,查找对象可以缓存多长时间的源指令。 按顺序,找到以下响应 header 之一:
  • Cache-Control: s-maxage=x
  • Cache-Control: max-age=x
  • Expires

  • 停止使用此排序遇到的第一个值,然后继续下一步。

    如果未找到值,请使用 默认TTL .停止。

    否则,使用在上一步中发现的值:
  • 如果小于 最小 TTL ,然后将对象的 TTL 设置为最小 TTL;否则,
  • 如果大于 最大TTL ,然后将对象的 TTL 设置为最大 TTL;否则,
  • 使用在上一步中找到的值作为对象的 TTL。

  • https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html .

    请务必注意,TTL 确定允许 CloudFront 缓存响应的时间。它没有规定 CloudFront 需要多长时间来缓存响应。如果对象很少被访问,CloudFront 可以在 TTL 到期之前从缓存中驱逐对象。

    将一些(但不是全部)标题列入白名单以转发到源不会改变上述任何逻辑。

    它改变的是如何评估对象以确定缓存的响应是否可用。

    例如,如果您转发 Origin header 到原点,然后是 Origin 的每个唯一值header 创建一个不同的缓存条目。两个相同的请求,除了它们的 Origin header ,然后被认为是不同的对象...所以 Origin: https://one.example.com 的缓存响应如果以后对相同资源的请求包括 Origin: https://two.example.com,则不会使用.两者都将被发送到源,并且都将被独立缓存,以用于服务具有相同匹配请求 header 的 future 请求。

    CloudFront 这样做是因为如果您需要将 header 转发到源,那么这意味着源可能会对列入白名单的 header 的不同值做出不同的 react ......因此它们被单独缓存。

    不必要地转发 header 将因此不必要地降低您的缓存命中率。

    根据不同的 header ,CloudFront 可以缓存的同一资源的不同副本的数量没有记录限制。

    但是将所有 header 转发到源将任何 future 请求真正相同的可能性几乎为零。这可能会消耗大量缓存存储,存储永远不会再次重用的对象,因此 CloudFront 将此视为一种特殊情况,并且不允许在这种情况下进行任何缓存。因此,您需要将最小 TTL 设置为 0 以保持一致性。

    ¹此处使用的对象的 TTL 是指 CloudFront 的每个缓存对象的内部计时器,该计时器跟踪允许继续为缓存对象提供服务的时间,而无需检查源。 CloudFront 中对象的 TTL 只有 CloudFront 知道,因此该值不会影响浏览器缓存。

    关于amazon-web-services - 什么是 Cloudfront 最小 TTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073731/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com