带有查询字符串的 Azure CDN 缓存

Azure CDN caching with query string

我很好奇我目前在使用 Azure CDN 时遇到的一个问题,但我没有答案。因此,我有一个 CDN 配置文件和端点配置为缓存存储在存储容器中的一些内容。在缓存行为中,我使用默认值(忽略查询字符串)。所以我修改了容器中的一个文件,我能够从容器中检索修改后的文件,但不能从 CDN 边缘检索,因为边缘返回文件的先前缓存版本。所以我继续清除 CDN 中的文件,在清除之后,我能够得到文件的修改版本。但是,如果我使用任何查询字符串参数向 cdn 边缘请求文件,我得到的是文件的原始版本,而不是文件的修改版本。

通过边缘请求文件的示例:

w/o qs: https://#storage_account#/#file_path#/hh.min.css -> 它给了我修改后的版本
w qs: https://#storage_account#/#file_path#/hh.min.css?v=0.5 -> 它给了我原始版本
w qs (2): https://#storage_account#/#file_path#/hh.min.css?a=b -> 它给了我原始版本

知道为什么会这样吗? 谢谢

最有可能发生的事情是查询的使用使用了缓存资产,如 documentation

所述

忽略查询字符串:默认模式。在此模式下,CDN 存在点 (POP) 节点在第一次请求时将请求者的查询字符串传递到源服务器并缓存资产。 所有后续请求从 POP 提供的资产忽略查询字符串,直到缓存的资产过期。

所以我猜缓存的资产还没有过期。为避免此问题,您应该考虑绕过查询字符串的缓存:

绕过查询字符串的缓存:在这种模式下,带有查询字符串的请求不会缓存在 CDN POP 节点。 POP 节点直接从原始服务器检索资产,并随每个请求将其传递给请求者。

如果上述选项导致延迟,我建议调整缓存规则。