Cloudfront max-age 和 TTL 一起有用吗?
Cloudfront max-age together with TTL usefull?
对于图片库,我使用亚马逊云端。
我在原点设置:
Cache-Control:max-age=31536000 (1 Year)
1。当我已经设置了最大年龄时,将 TTL 0(24 小时)设置为 1 年 和 是否有用?
2。当我将 max-age 设置为 1 年时,亚马逊会每 24 小时使用 TTL0 检查文件吗?
亚马逊说:
Objects are cached for the greater of the value of the Cache-Control max-age directive or the value of the CloudFront Minimum TTL
亚马逊也在说:
If an object in an edge location isn't frequently requested, CloudFront might evict the object—remove the object before its expiration date—to make room for objects that are more popular.
既然如此,我认为将TTL设置为年份是有用的,因为图像肯定会保留而不是之前?请指正。
感谢您的澄清。
这个问题基本上在 Cloudfront TTL not working 的答案中得到了回答,尽管这个问题并不完全重复。
不,如果您要设置自己的 Cache-Control:
headers,那么最小 TTL 并不是特别有用。
不,如果您的最小 TTL 或 您的 Cache-Control:
header 指定的时间超过 24 小时,Cloudfront 将不会每 24 小时检查一次。如果 object 将由 Cloudfront 检查,则 object 需要过期。最大允许年龄的要点,从像 Cloudfront 这样的缓存的角度来看,在最大允许年龄到期之前,不需要检查,因为 object 预计不会过时。
生存时间 (TTL)(不是“最小 TTL”,只是作为一般概念的 TTL)是缓存(如 Cloudfront)的最大 时间量,应该提供 object 的副本,而无需与原始服务器验证其 object 的副本是否过时。生存时间是缓存在不验证其新鲜度的情况下可以保留 object 的最大允许期限。
最小 TTL 不是 object 应缓存的最短时间。
最小 TTL 是用于确定最大允许年龄的最小值。它是 TTL 的最小值,并且仅指定最大年龄的最小下限,因此冲突 Cache-Control:
header 指定 更短 TTL 比最小 TTL 将被忽略、覆盖、向上增加,使用 最小 TTL 代替(以确定 object 缓存中允许的最大年龄)。
同样,在没有任何其他指令的情况下,最小 TTL 用作 最大 寿命的唯一决定因素缓存中的 object 是。
所以,不,将最小 TTL 和 Cache-Control:
header 都设置为相对较大的值将没有效果,因为正如您正确指出的那样:
Objects are cached for the greater of the value of the Cache-Control max-age directive or the value of the CloudFront Minimum TTL
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html
但是,必须在理解缓存的本质的情况下阅读此声明。缓存存储的内容——一般来说,就缓存的性质而言——是易变的和短暂的,可以随时被驱逐。正如您还注意到的:
If an object in an edge location isn't frequently requested, CloudFront might evict the object—remove the object before its expiration date—to make room for objects that are more popular.
配置 Cloudfront 或您的源服务器无法避免这种情况。有时 objects 被逐出。只要最大年龄允许,他们可能并且经常被关押,有时甚至更长。
Typically, CloudFront serves an object from an edge location until the object expires. After it expires, the next time the edge location gets an end-user request for the object, CloudFront forwards the request to the origin server to verify that the cache contains the latest version of the object:
If CloudFront already has the latest version, the origin returns only a 304 status code (not modified).
如果您不熟悉 304 Not Modified
,您可能希望研究它,以及通常会从您的源服务器触发此响应的 If-Modified-Since:
请求 header。 (当然,如果您正在缓存动态图像调整大小操作的结果,您的来源将永远无法响应 304
除非它保留了自己先前响应的本地副本请求。)
同样重要且经常被忽视的是 Cloudfront 不是一个单一的实体。说特定 object 在任何给定时刻“存储在”或“未存储在”Cloudfront 中是不准确的。截至撰写本文时,有 50 多个边缘位置,并且 object 可能存储在某些边缘位置,而不存储在其他边缘位置。它可能会从一个边缘位置提前被驱逐,但不会从其他边缘位置被驱逐。在从未请求过 object 的边缘位置,它永远不会被存储,直到第一个导致它被获取的请求发生。
对于图片库,我使用亚马逊云端。
我在原点设置:
Cache-Control:max-age=31536000 (1 Year)
1。当我已经设置了最大年龄时,将 TTL 0(24 小时)设置为 1 年 和 是否有用?
2。当我将 max-age 设置为 1 年时,亚马逊会每 24 小时使用 TTL0 检查文件吗?
亚马逊说:
Objects are cached for the greater of the value of the Cache-Control max-age directive or the value of the CloudFront Minimum TTL
亚马逊也在说:
If an object in an edge location isn't frequently requested, CloudFront might evict the object—remove the object before its expiration date—to make room for objects that are more popular.
既然如此,我认为将TTL设置为年份是有用的,因为图像肯定会保留而不是之前?请指正。
感谢您的澄清。
这个问题基本上在 Cloudfront TTL not working 的答案中得到了回答,尽管这个问题并不完全重复。
不,如果您要设置自己的 Cache-Control:
headers,那么最小 TTL 并不是特别有用。
不,如果您的最小 TTL 或 您的 Cache-Control:
header 指定的时间超过 24 小时,Cloudfront 将不会每 24 小时检查一次。如果 object 将由 Cloudfront 检查,则 object 需要过期。最大允许年龄的要点,从像 Cloudfront 这样的缓存的角度来看,在最大允许年龄到期之前,不需要检查,因为 object 预计不会过时。
生存时间 (TTL)(不是“最小 TTL”,只是作为一般概念的 TTL)是缓存(如 Cloudfront)的最大 时间量,应该提供 object 的副本,而无需与原始服务器验证其 object 的副本是否过时。生存时间是缓存在不验证其新鲜度的情况下可以保留 object 的最大允许期限。
最小 TTL 不是 object 应缓存的最短时间。
最小 TTL 是用于确定最大允许年龄的最小值。它是 TTL 的最小值,并且仅指定最大年龄的最小下限,因此冲突 Cache-Control:
header 指定 更短 TTL 比最小 TTL 将被忽略、覆盖、向上增加,使用 最小 TTL 代替(以确定 object 缓存中允许的最大年龄)。
同样,在没有任何其他指令的情况下,最小 TTL 用作 最大 寿命的唯一决定因素缓存中的 object 是。
所以,不,将最小 TTL 和 Cache-Control:
header 都设置为相对较大的值将没有效果,因为正如您正确指出的那样:
Objects are cached for the greater of the value of the Cache-Control max-age directive or the value of the CloudFront Minimum TTL
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html
但是,必须在理解缓存的本质的情况下阅读此声明。缓存存储的内容——一般来说,就缓存的性质而言——是易变的和短暂的,可以随时被驱逐。正如您还注意到的:
If an object in an edge location isn't frequently requested, CloudFront might evict the object—remove the object before its expiration date—to make room for objects that are more popular.
配置 Cloudfront 或您的源服务器无法避免这种情况。有时 objects 被逐出。只要最大年龄允许,他们可能并且经常被关押,有时甚至更长。
Typically, CloudFront serves an object from an edge location until the object expires. After it expires, the next time the edge location gets an end-user request for the object, CloudFront forwards the request to the origin server to verify that the cache contains the latest version of the object:
If CloudFront already has the latest version, the origin returns only a 304 status code (not modified).
如果您不熟悉 304 Not Modified
,您可能希望研究它,以及通常会从您的源服务器触发此响应的 If-Modified-Since:
请求 header。 (当然,如果您正在缓存动态图像调整大小操作的结果,您的来源将永远无法响应 304
除非它保留了自己先前响应的本地副本请求。)
同样重要且经常被忽视的是 Cloudfront 不是一个单一的实体。说特定 object 在任何给定时刻“存储在”或“未存储在”Cloudfront 中是不准确的。截至撰写本文时,有 50 多个边缘位置,并且 object 可能存储在某些边缘位置,而不存储在其他边缘位置。它可能会从一个边缘位置提前被驱逐,但不会从其他边缘位置被驱逐。在从未请求过 object 的边缘位置,它永远不会被存储,直到第一个导致它被获取的请求发生。