共计 742 个字符,预计需要花费 2 分钟才能阅读完成。
明天遇到一个 html 动态页面始终不更新的问题,抽空找了下起因。
景象:上线了一个动态页面,强刷、清理浏览器缓存都无奈更新资源。显然不是浏览器的问题,应该是 cdn 这边的缓存没更新。
https://app.xxx.com.cn/xxx/xxx.html
而后给页面加个随机参数就更新了
https://app.xxx.com.cn/xxx/xxx.html?12
奇怪的是不加参数仍然是旧内容。比照了两个页面的 response header
,除了Last-Modified
的工夫不一样,其余局部基本相同:
此前狐疑 cdn 只更新了局部机器,然而这两个申请的 ip 是雷同的,从同一个节点拉取的页面,更新问题能够排除。
在其余设施上测试也是雷同的后果,能够排除本地缓存,网络等起因。
通过下面的测试,失去一些论断:同一个页面带不带 query 参数,返回的却是不同的内容。
为什么是不同的后果?cdn 到底更新了没有?
根本能确定 cdn 将这两个链接视为不同的页面,这样能够解释的通:带随机参的页面视为新的页面,cdn 没有缓存,从源拉取资源。不带参数的页面仍然是旧资源没有更新。
登录 cdn 看了域名配置:
缓存自动更新工夫是 1 天,因而缓存没有更新(实际上在上线流程里,公布资源后会强刷该资源缓存,但因为两头呈现问题而跳过了这一步)。然而带参数的 url 拉到了最新资源,阐明源的资源更新了。
在域名配置里看到‘过滤参数配置’没有关上:
官网文档有具体解释:https://cloud.tencent.com/doc…
这就解释通了,带参数的 url 被当做了不同的资源。
咱们不须要靠参数辨别不同的资源,因而关上这一项才对。
实际上,不做任何操作,过一天期待资源更新后也会更新。(当然业务没法等 1 天)
或者在治理后盾里手动刷新该 url 缓存也可。
正文完