You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Front Door Premium是否忽略Vary响应头?如何使其生效?

Azure Front Door Premium CDN忽略Vary响应头问题排查与解决

问题描述

我使用Premium层级的Azure Front Door,已在路由上启用CDN缓存。目前遇到疑似CDN忽略Vary响应头的问题。

测试步骤及结果

C:\Users\TomaszMadeyski>curl -H "Next-Url: 123" -sS -D - https://my.page.at.frontdoor.com -o /dev/null
HTTP/1.1 200 OK
Date: Fri, 12 Jul 2024 09:59:38 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
cache-control: public, max-age=3600, stale-while-revalidate=3600
vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url
x-azure-ref: 20240712T095938Z-1688db7465dw7s2w5364ydfyf4000000062g00000001m8hq
X-Cache: TCP_HIT
x-fd-int-roxy-purgeid: 37
X-Cache-Info: L1_T2

curl: (23) Failure writing output to destination, passed 11365 returned 4294967295

C:\Users\TomaszMadeyski>curl -H "Next-Url: 1234" -sS -D - https://my.page.at.frontdoor.com -o /dev/null
HTTP/1.1 200 OK
Date: Fri, 12 Jul 2024 10:02:34 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
cache-control: public, max-age=3600, stale-while-revalidate=3600
vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url
x-azure-ref: 20240712T100234Z-1688db7465djbxcc9gu32zk19800000006eg000000001ytv
X-Cache: TCP_HIT
x-fd-int-roxy-purgeid: 37

从测试结果可见,响应中包含Vary头且包含Next-Url字段,但当Next-Url取值不同时,CDN仍返回TCP_HIT,因此我认为Front Door的CDN忽略了Vary头设置。

疑问

我的结论是否错误?有没有办法让Front Door的CDN尊重Vary头设置?


问题解答

结论分析

你的结论不完全准确,Azure Front Door Premium并非完全忽略Vary头,而是默认仅对标准HTTP头的Vary字段生效,自定义头(如Next-Url)不在默认识别范围内。CDN默认不会自动将自定义请求头纳入缓存键的生成逻辑,因此即使Vary头包含自定义字段,不同取值的请求仍可能命中同一缓存条目。

解决方案

要让Front Door CDN尊重自定义头的Vary设置,需手动将自定义头添加到缓存键规则中,具体步骤如下:

  1. 编辑路由的缓存键规则

    • 进入Azure Front Door资源的「路由」页面,选择目标路由并点击「编辑」
    • 切换到「缓存」选项卡,找到「缓存键」配置区域,点击「添加规则」
    • 在规则配置中,选择「请求头」作为匹配类型,输入Next-Url作为目标头,将其添加到缓存键的组成部分
    • 保存路由配置,等待配置生效(通常需要数分钟)
  2. 验证配置效果

    • 配置生效后,重新执行测试:首次发送Next-Url:123的请求会返回TCP_MISS,后续相同请求返回TCP_HIT;发送Next-Url:1234的请求会触发新的回源,返回TCP_MISS,后续相同请求才会命中缓存
    • 确认不同Next-Url取值的请求会生成独立的缓存条目
  3. 注意事项

    • 避免将过多自定义头加入缓存键,否则会导致缓存碎片化,增加源站回源压力,影响CDN缓存效率
    • 确保源站返回的Vary头包含所有需要区分缓存的自定义头字段,与缓存键规则保持一致

内容的提问来源于stack exchange,提问作者Tomasz Madeyski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:43:23