我知道我们可以将过期标头设置为 Amazon S3,但如何为 cloudfront 文件设置它?我读到我们可以将 TTL 从 24 小时设置为 1 小时,但我想将其设置为 1 年。
答案1
这是通过常规 HTTP 缓存控制机制来处理的(请参阅RFC 2616) 记录在Amazon CloudFront 对象过期, 具体来说:
默认情况下,每个对象都会在 24 小时后自动过期。要指定不同的过期时间,请配置源以向每个对象添加 Cache-Control max-age 指令或 Expires 标头字段的值:
该
Cache-Control max-age
指令允许您指定对象在 CloudFront 再次从源服务器获取对象之前在缓存中保留的时间(以秒为单位)。CloudFront 支持的最小到期时间为 Web 分配 0 秒,RTMP 分配 3600 秒。最大到期时间为 2038 年。请按以下格式指定值:
Cache-Control: max-age=seconds
例如,以下指令告诉 CloudFront 将关联对象保留在缓存中 3600 秒(一小时):
Cache-Control: max-age=3600
如果您希望对象在 CloudFront 边缘缓存中的保留时间与在浏览器缓存中的保留时间不同,则可以同时使用
Cache-Control max-age
和Cache-Control s-maxage
指令。有关更多信息,请参阅指定 CloudFront 为 Web 分配缓存对象的最短时间。标
Expires
头字段允许您使用以下格式指定到期日期和时间RFC 2616,超文本传输协议 - HTTP/1.1 第 3.3.1 节,完整日期, 例如:
Sat, 30 Jun 2012 23:59:59 GMT
[...]
我们建议您使用 Cache-Control max-age 指令而不是 Expires 标头字段来控制对象缓存如果您同时指定 Cache-Control max-age 和 Expires 的值,CloudFront 仅使用 max-age 的值。[重点是我的]
您可能还想看看指定 CloudFront 为 Web 分配缓存对象的最短时间了解最小 TTL = 0(默认)(参见我的回答CloudFront 中的 TTL 0 有什么用处?了解有关此功能更详细的解释)。
答案2
你为什么要这么做?你认为这样做的话,你的文件会在一年内被保存在更靠近边缘的位置,而无需单点提取吗?如果是这样,那么这根本不会发生,抱歉,24 小时对于 CDN 来说实际上是很长的时间。如果你担心文件从边缘掉落,只需在世界各地分发一些虚拟机,定期获取你的内容(我们称之为“tickling”),将你的内容保持在边缘。