二级域名与主域名区别_怎样排除缓存造成的假象

📍 WDQWDWQD987AAAAA:216.73.217.113
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /728074b5cf58.html
📄

二级域名与主域名区别_怎样排除缓存造成的假象

排除缓存造成的假象,核心做法是让对比双方处在同一缓存状态下:用无痕窗口加禁用缓存的方式重新请求,或者给URL加一个一次性查询参数强制回源,再对比主域名和二级域名的响应头、正文与状态码。如果刷新后差异消失,说明之前看到的是缓存副本;如果差异仍在,才需要继续查配置、DNS或服务端逻辑。

先确认差异是不是缓存造成的

主域名和二级域名常被放在同一台服务器或同一个CDN下,但缓存策略可能不同。判断时不要只看浏览器显示的内容,要看响应头里的缓存相关字段,例如 Cache-Control、Age、ETag、Last-Modified 以及CDN自己加的命中标识。若二级域名的 Age 明显大于0,而主域名是0或没有该字段,说明二级域名返回的是缓存副本,两者的差异可能只是时间差,不是真实配置差异。

可以按下面顺序执行:

  1. 打开无痕窗口,按 F12 打开开发者工具,切到 Network 面板,勾选 Disable cache。
  2. 分别访问主域名和二级域名的同一路径,记录状态码、响应头和正文关键位置。
  3. 在URL后加一个不会命中的参数,例如 ?nocache=20240101a,再次访问,观察差异是否变化。
  4. 若加参数后两者一致,说明此前差异来自缓存;若仍不一致,进入下一步排查。

主域名与二级域名在缓存上的常见差异点

主域名和二级域名虽然共享同一套后端,但在缓存层面是分开的键。常见差异包括:

这些差异中,只有第一项是纯缓存问题,后三项即使清掉缓存也会复现,需要分别处理。

用响应头做一次可复核的对比

在命令行里分别请求两个域名,是时间和人手有限时最快的方式。示例(假设域名为 example.com 和 sub.example.com,仅作格式演示):

curl -I https://example.com/page

curl -I https://sub.example.com/page

对比输出中的 Cache-Control、Age、X-Cache、Via。如果二级域名出现 X-Cache: HIT 而主域名是 MISS,优先怀疑缓存。此时可以尝试对二级域名发起一次强制刷新(具体方法取决于所用CDN或代理,需查对应文档),再重新请求,看 Age 是否归零、内容是否与主域名一致。

如果两个域名的 Cache-Control 都是 no-store 或 private,却仍看到旧内容,那问题可能不在HTTP缓存,而在DNS、本地hosts、服务端页面缓存或数据库查询缓存。这时应换网络、换设备再测一次,缩小范围。

时间有限时,先做哪一步

按代价从低到高排序:

  1. 无痕窗口加禁用缓存:几秒钟,能排除浏览器本地缓存。
  2. 加查询参数请求:十几秒,能排除CDN和中间层缓存。
  3. curl对比响应头:一两分钟,能区分缓存命中与回源差异。
  4. 检查CDN按域名的缓存规则:需要登录控制台,代价较高,放在前三步确认是缓存后再做。

判断结果:如果第1、2步之后差异消失,就不必再查CDN规则,直接记录“缓存假象”即可;如果第3步显示两个域名回源结果就不同,则应转向查回源Host、Cookie作用域或后端按域名分支的逻辑,而不是继续清缓存。

注意缓存之外的干扰项

robots.txt 的抓取限制不等于可靠的索引移除,它只影响爬虫抓取,不影响已缓存页面被用户看到。站点地图不保证收录,也不能用来判断缓存是否生效。如果发现搜索结果里主域名和二级域名展示不同,先确认那是搜索引擎自己的缓存快照还是实时抓取结果,两者处理方式不同。

下一步:选一个具体路径,用无痕窗口和curl各测一次主域名与二级域名,把响应头里的 Age 和缓存命中标识记下来。若两者一致,就不用再花时间在缓存上;若不一致,再按CDN、回源Host、Cookie的顺序逐项核对。

图1 图2

nginx