我对Azure CDN当前面临的问题感到好奇,但我没有答案。因此,我将CDN配置文件和端点配置为缓存存储在存储容器中的某些内容。在缓存行为中,我使用默认值(忽略查询字符串)。因此,我修改了容器中的一个文件,并且能够从容器中检索到修改后的文件,但无法从CDN边缘中检索到该文件,因为边缘返回了文件的先前缓存版本。因此,我继续清除CDN中的文件,并且清除之后,我能够获取文件的修改版本。但是,如果我使用任何querystring参数将文件请求到cdn边缘,我将获得文件的原始版本,而不是文件的修改版本。
通过edge请求文件的示例:
不带qs:here->它给了我修改后的版本
w qs:https://#storage_account#/#file_path#/hh.min.css->它给了我原始版本
w qs(2):https://#storage_account#/#file_path#/hh.min.css?v=0.5->它给了我原始版本
知道为什么会这样吗? 谢谢。
答案 0 :(得分:2)
忽略查询字符串:默认模式。在这种模式下,CDN存在点(POP)节点在第一个请求上将查询字符串从请求者传递到原始服务器,并缓存资产。 POP提供的服务会忽略查询字符串,直到缓存的资产过期为止。
所以我的猜测是缓存的资产尚未过期。为避免此问题,您应考虑绕过查询字符串的缓存:
绕过查询字符串缓存:在这种模式下,带有查询字符串的请求不会缓存在CDN POP节点上。 POP节点直接从原始服务器检索资产,并将其随每个请求传递给请求者。
如果以上选项导致延迟,建议您调整缓存规则。