我有一个为Websocket连接服务的EC2实例,其中CloudFront位于顶部。现在,我正在提供无法在CloudFront中缓存的动态内容,因此通过将“基于所选请求头的缓存”选项设置为"All“,有效地禁用了对象缓存。
我还需要处理查询字符串,所以我不得不处理“查询字符串转发和缓存”选项。
我的问题基本上是标题:
我可以让CloudFront转发所有查询字符串,但缓存基于无?
我似乎有三种不同的选择,但我可能遗漏了什么。
现在,我已经将选项设置为“基于all转发所有缓存”。
实际上,我不知道目前发生的事情是否会以任何方式影响我的应用程序(看起来并不是这样)。不过,希望在阅读了一些答案之后,我能够理解选择该选项后缓存的内容。
发布于 2020-04-16 23:00:26
我相信你误解了Forward all的意思,基于all的缓存,这不是很清楚的措辞。它过于简化,甚至错误地描述了该选项的实际操作。
选择此选项不会启用缓存或导致更多的缓存。事实上,它会导致较少的缓存。此选项将任何/所有查询字符串参数添加到缓存键,这意味着具有完全相同路径、完全相同的白名单标题但不同查询字符串参数键和/或值的任何两个请求都被视为两个不同对象的无关请求,因此,即使第一个请求导致缓存响应,第二个请求也不会使用该缓存响应。
更好的分阶段可能是转发所有,并且只有当所有对象都相同时,才有可能从缓存中为对象提供服务。但我怀疑,Rhat仍有一些有待改进的地方,但也许它澄清了一些事情。
如果所有标头都被白化以进行转发,则无论此设置如何,都不会缓存任何内容。如果来自原点的Cache-Control标头指示CloudFront不缓存对象,则情况也是如此。由于没有缓存,“基于所有的缓存”没有任何影响,CloudFront将按照您的意愿在这里执行。
https://serverfault.com/questions/1012625
复制相似问题