背景

背景

背景

我有一个 EC2 实例提供 Websocket 连接,顶部有 CloudFront。现在,我正在提供无法在 CloudFront 中缓存的动态内容,因此我通过将“基于所选请求标头的缓存”选项设置为“全部”有效地禁用了对象缓存。

我还需要处理查询字符串,所以我不得不使用“查询字符串转发和缓存”选项。

问题

我的问题基本上就是标题:
我可以让 CloudFront 转发所有查询字符串,但不基于任何查询字符串进行缓存吗?
似乎我有三个不同的选项,但它们都没有做到这一点,但我可能忽略了一些东西。
目前,我已将选项设置为“转发所有,基于所有缓存”。

免责声明

我实际上不知道目前发生的事情是否会对我的应用程序产生任何影响(似乎没有)。但愿在阅读了一些答案之后,我能理解选择该选项后缓存的内容。

答案1

我相信你误解了转发全部、基于全部缓存、措辞不太清楚。它过于简单,甚至可能歪曲了该选项的实际作用。

选择此选项不会启用缓存或导致更多的缓存。事实上,它会导致较少的缓存。此选项将任何/所有查询字符串参数添加到缓存键,这反过来意味着任何两个具有完全相同路径、完全相同白名单标头但不同查询字符串参数键和/或值的请求都被视为对两个不同对象的无关请求,因此即使第一个请求导致响应被缓存,第二个请求也不会使用该缓存响应。

更好的分阶段方法可能是转发所有对象,并且只有当所有对象都相同时才可能从缓存中提供对象。但我认为 Rhat 仍有一些不足之处,但也许它能在某种程度上澄清一些事情。

如果所有标头都已列入转发白名单,则无论此设置如何,都不会缓存任何内容。如果Cache-Control来自源的标头指示 CloudFront 不要缓存对象,情况也是如此。由于没有缓存任何内容,“基于全部缓存”没有影响,CloudFront 将在此处执行您想要的操作。

相关内容