我有一个来源,它没有在其响应中设置缓存控制标头。看起来好像这些响应没有被 CloudFront 缓存(我从来没有看到
x-cache: Hit from cloudfront
标头),但我想知道这种行为是否记录在任何地方。
这些请求似乎可能会被 CloudFront 折叠:
但是,如果同时存在针对同一对象的请求,也就是说,如果针对同一对象(具有相同缓存键)的其他请求在 CloudFront 收到第一个请求的响应之前到达边缘站点,则 CloudFront 会在转发该对象之前暂停。向原产地提出额外请求。这种短暂的暂停有助于减少原点上的负载。 CloudFront 将原始请求的响应发送到暂停期间收到的所有请求。这称为请求崩溃。
...
如果您想防止特定对象的请求崩溃,您可以将缓存行为的最小 TTL 设置为 0 并配置源端发送 Cache-Control: private、Cache-Control: no-store、Cache-Control: no -cache,缓存控制:max-age=0,或缓存控制:s-maxage=0。
仅此一点就足以设置 Cache-Control 标头来禁用请求折叠,但我很好奇如果缺少
Cache-Control
标头并且最小 TTL 设置为 0,CloudFront 的默认缓存行为是什么。
您可以在 CloudFront 文档中找到此内容:
[如果]源端未向对象添加
指令[并且]最小 TTL = 0 CloudFront 会根据 CloudFront 默认 TTL 的值缓存对象。Cache-Control: max-age
该表列出了标头值和设置的不同组合如何影响 CloudFront 的缓存行为。