CDN缓存了HTML,改完内容后线上看到的还是旧页面

来源:互联网 时间:2026-10-25

文章改了一个错别字,发布,刷新页面,还是旧的。按Ctrl+F5强刷,变了,换一台没访问过的电脑打开,又是旧的。这时候容易怀疑自己改错了文件,或者发布没成功,其实源站早就更新了,卡在中间那层缓存上。CDN的作用就是把内容存在离用户近的节点上,第一次请求回源取一份存起来,后面的请求直接给存的那份。存多久由响应头里的缓存指令决定,源站没有明确说,CDN只能按默认策略猜,而猜的结果往往比你期望的长。源站没写缓存指令、动态页面被按默认策略存下来,这类问题多半出在这里。

先确认是不是真的命中了CDN缓存。看响应头,多数CDN会加一个标识当前请求是命中还是回源的字段,命中的时候还会带一个Age,显示这份缓存已经存了多少秒。Age是一个很大的数,说明你看到的是一直存着的那一份。浏览器自带的面板里也能看到这些头,只是容易被本地缓存和Service Worker干扰,用curl请求一次最干净。

HTML为什么不建议长时间缓存,原因很直接:页面内容变动频繁,缓存越久,用户看到旧内容的时间就越长。图片、样式表、脚本这些可以长缓存,靠文件名里带版本号来区分,改了内容就换文件名,缓存自然失效。

对HTML,稳妥的做法是让源站在响应头里明确写不缓存或者短缓存,由浏览器去源站确认。这样每次访问都会问一句内容变没变,没变就走304,几乎不增加流量。

已经缓存住的内容要主动清。控制台一般提供按URL刷新和按目录刷新两种,前者只动一条地址,影响面小;后者一次清一整片,省事但会连带清掉没改过的内容。刷新之后也不是立刻在所有节点生效,通常要等几十秒到几分钟,急着验证容易以为没刷上。

还要注意源站和CDN的优先级。有些CDN允许在节点上单独配置缓存规则,源站写了不缓存,节点上那条规则还在,两者冲突时以哪一边为准要看产品设计,改完响应头记得去节点配置里对一遍。

验证方法用curl带-I请求页面,看响应头里的缓存指令和Age是不是符合预期。源站改完之后等一个缓存周期,再用未访问过的环境试一次,两次都对,才算真的生效。

相关文章

标签:

A5创业网 版权所有

返回顶部