代码之家  ›  专栏  ›  技术社区  ›  Hugo Barona

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

  •  1
  • Hugo Barona  · 技术社区  · 6 年前

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

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

    不含质量标准: https://#storage_account#/#file_path#/hh.min.css ->它给了我修改过的版本
    质量标准: https://#storage_account#/#file_path#/hh.min.css?v=0.5 ->它给了我原始版本
    质量标准(2): https://#storage_account#/#file_path#/hh.min.css?a=b ->它给了我原始版本

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Adam Smith - Microsoft Azure    6 年前

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

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

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

    绕过查询字符串的缓存: 在这种模式下,带有查询字符串的请求不会缓存在cdn pop节点上。pop节点直接从源服务器检索资产,并将其与每个请求一起传递给请求者。

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