← 返回博客列表

网站更新了却还显示旧页面?CDN 缓存、浏览器缓存与 DNS 缓存逐层排查全解

2026-10-18 · 刺猬VPN

「明明已经更新了,为什么还是旧的」是做网站最常听到的一句抱怨。站长刚发布了新版本,自己刷新几次都正常,用户却截图说按钮还是老样子;或者同一时间,一部分地区的访客看到新页面,另一部分看到旧页面。普通访客也会遇到:某个网站公告说已经修复,自己这里还是报错。

页面从源站到你的屏幕,中间至少经过四层缓存:CDN 的边缘节点、浏览器的 HTTP 缓存、网站注册的 Service Worker,以及决定你连到哪台服务器的 DNS 缓存。任何一层留着旧内容,你看到的就是旧页面。而且 CDN 在全球有很多边缘节点,每个节点各自缓存,所以不同地区、不同网络的人看到的版本可能不同。下面先讲四层缓存的差别,再给出逐层排查的步骤。

四层缓存的差别

判断是哪一层的最快方法是看范围:所有人都是旧版,问题在源站或 CDN 的全局缓存;只有部分地区是旧版,问题在个别边缘节点;只有你一台电脑是旧版,问题在浏览器或 Service Worker;网站换了服务器之后才出现的,多半是 DNS。

缓存层存在哪里由谁控制典型症状清除方式
CDN 边缘缓存离访客最近的边缘节点站长与 CDN 规则部分地区看到旧版在 CDN 控制台按网址或全部清除
浏览器 HTTP 缓存访客自己的浏览器响应头 Cache-Control只有某台电脑是旧版强制刷新或清除站点数据
Service Worker浏览器里的后台脚本网站代码强制刷新也无效开发者工具里注销
DNS 缓存系统、路由器、运营商域名解析记录的 TTL换服务器后仍连旧地址刷新系统 DNS 缓存
源站自身缓存服务器上的页面缓存插件站长所有人都是旧版清除服务器端缓存

逐层排查:分步操作步骤

  • 第一步:先把网络线路准备好。要比较不同地区看到的版本,就用刺猬VPN 分别连到两三个不同地区的节点,再打开同一个网址,每个地区的访问会落到不同的边缘节点上,能快速判断是不是个别节点的缓存没更新。客户端用自定义用户名和密码注册,不需要邮箱和手机号;
  • 第二步:在终端执行 curl -I 加网址,只看响应头。重点看 age(内容在缓存里放了多少秒)、cache-control(缓存规则)、etag 或 last-modified(内容版本标识);
  • 第三步:用的是 Cloudflare 时看 cf-cache-status:HIT 表示命中缓存,MISS 表示刚从源站取,EXPIRED 表示过期后重新取,STALE 表示源站不可用时返回了旧内容,DYNAMIC 表示不缓存;其他 CDN 一般看 x-cache;
  • 第四步:在网址后面加一个随意的查询参数,比如问号后接 v=2,再请求一次。带参数能拿到新内容、不带参数拿到旧内容,就能确认是 CDN 缓存;
  • 第五步:到 CDN 控制台清除缓存。Cloudflare 在「缓存」→「配置」里选「清除缓存」,优先用「自定义清除」按网址清除,只有大改版时才用「清除所有内容」;
  • 第六步:排除浏览器缓存。按 Ctrl 加 F5,或打开开发者工具,在「网络」面板勾选「停用缓存」后刷新;
  • 第七步:排除 Service Worker。在开发者工具的「应用」面板找到「Service Worker」,点「取消注册」,再到「存储」里清除站点数据;
  • 第八步:排除 DNS。Windows 执行 ipconfig /flushdns,macOS 执行 sudo dscacheutil -flushcache,再用 nslookup 查看域名当前解析到的地址是否为新服务器。

按现象排查:谁看到旧版、为什么

排查时记住一个原则:先确认源站本身已经是新版,再往外一层一层查。直接用服务器地址或源站的内部域名访问一次,如果源站返回的也是旧版,那问题在部署本身,清多少缓存都没用。确认源站无误后,再根据下面的现象判断旧内容卡在哪一层。每清除一层就重新验证一次,不要一口气把所有缓存都清掉,否则下次遇到同样的问题,依然不知道根源在哪。

  • 所有人都看到旧版:源站部署没成功或服务器端页面缓存没清,先直连源站确认;
  • 部分地区看到旧版:个别边缘节点缓存未过期,在 CDN 控制台按网址清除,或者等缓存时间到期;
  • 页面是新的,样式或脚本是旧的:静态文件文件名没变,缓存时间又很长,给文件名加上内容哈希;
  • 强制刷新后仍是旧版:网站注册了 Service Worker,在开发者工具里取消注册后再刷新;
  • 换了服务器后部分用户连到旧服务器:DNS 记录的 TTL 还没过,或运营商的 DNS 缓存了旧记录;
  • 源站宕机时仍能打开旧页面:CDN 开启了「源站不可用时提供旧内容」,这是有意的设计,恢复后会更新;
  • 登录后的页面也被缓存:缓存规则写得太宽,把带 Cookie 的个性化页面也缓存了,需要立即修改规则并清除缓存。

缓存策略与排查方式怎么选

最稳妥的组合是:HTML 页面缓存时间短,或设置为每次都向源站确认是否更新;样式、脚本、图片的文件名带内容哈希,缓存时间设得很长。这样发布新版本时,HTML 一更新就引用新文件,旧文件自然不再被访问。用线路在不同地区复查时,免费节点适合偶尔对比,频繁发布、需要每次核对多个地区的,会员节点覆盖的地区更多。实际可用性取决于当前网络环境。

对比项按网址清除全部清除缩短缓存时间文件名加哈希
生效速度很快很快要等旧缓存过期发布即生效
对源站压力小大,所有请求回源长期偏大小
适合内容单个页面改动大改版经常更新的页面样式、脚本、图片
风险漏清相关网址短时间回源流量激增命中率下降需要构建工具支持
多地区对比免费节点永久免费、不限流量、不限速同左会员节点覆盖更多地区时长套餐有效期内不限流量、不限速

响应头怎么读

看懂这几个响应头,大多数「为什么还是旧的」都能当场找到答案:age 很大而 max-age 更大,说明缓存还没过期;带了 stale-while-revalidate,说明第一次刷新拿到旧版、第二次才是新版,属于正常行为。

响应头示例含义排查用途
cache-control: max-age=3600缓存一小时判断旧内容最多还会留多久
cache-control: no-cache可以缓存,但每次要向源站确认HTML 页面的常用设置
age: 86000这份内容已在缓存里放了约一天数值大说明很久没回源
etag内容的版本标识与源站对比是否同一版本
stale-while-revalidate过期后先返回旧内容再后台更新解释为何刷新一次后才变新

不同平台的清除入口与普通访客能做的事

不同服务的清除入口位置不同:Cloudflare 在站点的「缓存」菜单里;Vercel、Netlify 这类部署平台每次发布新版本会自动让旧缓存失效,一般不需要手动清除,出问题时重新部署一次即可;国内云厂商的 CDN 通常在「刷新预热」页面提交网址或目录。很多 CDN 还提供接口,可以在部署脚本的最后一步自动调用清除,避免每次发布后忘记手动操作。

如果你只是普通访客,能做的事情有限但也够用:先强制刷新,再清除这个网站的站点数据,然后换一个网络或连到另一个地区的节点再打开。如果换了地区之后就是新版,说明是你所在地区的边缘节点还没更新,耐心等一会儿或把截图和访问时间发给网站客服,告诉对方你看到的 age 与 cf-cache-status 数值,对方定位起来会快很多。

和就近节点、DNS 知识的分工

为什么不同地区会连到不同的边缘节点、同一个地址为什么能在全球各地同时响应,背后是任播与地理调度,原理见 任播 CDN 与地区判定。DNS 缓存不只影响网站更新,还关系到你的查询有没有绕开线路被本地网络看到,相关概念见 DNS 泄露详解。

排查时把这几层知识串起来:先用 DNS 工具确认连到的是哪台服务器,再用响应头确认是不是缓存,最后切换地区对比不同边缘节点。三步走完,旧页面藏在哪一层基本就清楚了,处理起来也就有的放矢。

常见报错速查表

现象原因解决办法
所有人都是旧版源站未更新或服务器缓存直连源站确认,清服务器缓存
部分地区是旧版个别边缘节点未过期按网址清除 CDN 缓存
样式脚本是旧的文件名未变且缓存很长文件名加内容哈希
强制刷新也无效Service Worker 接管请求开发者工具里取消注册
连到旧服务器DNS 记录未过 TTL刷新 DNS 缓存,提前调低 TTL
登录页面被缓存缓存规则过宽排除带 Cookie 的请求并清除缓存

高频问答

  • 问:清除 CDN 缓存要多久生效?答:主流 CDN 通常几秒到几分钟全网生效,个别服务商需要更久,以服务商说明为准;
  • 问:频繁全部清除有坏处吗?答:会让所有请求短时间内回源,源站可能扛不住,尽量按网址清除;
  • 问:普通访客能清 CDN 缓存吗?答:不能,只能清自己的浏览器缓存和 DNS 缓存,CDN 缓存要等站长处理;
  • 问:为什么换个网络就是新版?答:不同网络连到不同的边缘节点,各节点缓存的版本不同;
  • 问:迁移服务器前要做什么?答:提前一两天把 DNS 记录的 TTL 调低,迁移完成后再调回;
  • 问:开了 VPN 看到的版本不一样正常吗?答:正常,线路出口在另一个地区,访问会落到那个地区的边缘节点。

长期稳妥的做法

网站更新后仍显示旧页面,问题一定在某一层缓存里:先直连源站确认部署成功,再用 curl 看响应头判断 CDN 是否命中,切换地区对比不同边缘节点,然后依次排除浏览器缓存、Service Worker 和 DNS。长期来看,HTML 短缓存、静态资源加哈希长缓存、迁移前调低 TTL,能让大多数「旧页面」问题不再出现。把清除缓存写进发布流程的最后一步,再在发布后从两三个地区各打开一次首页,几分钟的检查就能替你挡掉大部分用户投诉。

刺猬VPN 采用 HTTPS+AES 加密传输,自定义用户名和密码即可匿名注册,不需要邮箱和手机号;免费节点永久免费、不限流量、不限速,适合偶尔从其他地区复查网站版本;时长套餐有效期内不限流量、不限速,适合经常发布、需要多地区核对的站长,一个账号支持多设备同时在线,按域名和 IP 的智能分流可以只让目标网站走线路。实际可用性取决于当前网络环境。

换刺猬VPN告别连接烦恼:一键连接、连接稳定

刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。