Azure CDN purge因浏览器长TTL本地缓存失效 如何配置全局强制刷新规则
核心解决逻辑
你们遇到的问题根源是给浏览器返回的强制缓存max-age设置过长,浏览器未发起请求到CDN就直接读取本地缓存,CDN purge操作完全无法触达用户本地缓存,因此只需调整CDN返回给浏览器的缓存策略即可,无需修改Last-Modified/ETag。
具体Azure CDN规则配置
按照优先级从高到低配置以下2条规则即可:
- 入口文件规则(针对HTML等无哈希的核心入口资源)
- 匹配条件:URL文件扩展名为
html/htm - 操作:修改响应头
Cache-Control,值为public, max-age=0, must-revalidate, s-maxage=31536000 - 参数说明:
s-maxage=31536000:CDN侧缓存1年,满足你们CDN缓存到下一次部署的需求max-age=0:告知浏览器不做本地强制缓存,每次访问都需要向CDN发起请求验证资源是否更新must-revalidate:强制浏览器验证资源有效性,禁止使用过期本地缓存
- 匹配条件:URL文件扩展名为
- 静态资源规则(针对JS/CSS/图片等可加哈希的资源)
- 匹配条件:URL文件扩展名为
js/css/png/jpg/gif/svg等静态资源后缀 - 操作:修改响应头
Cache-Control,值为public, max-age=31536000, immutable - 注意:该规则需要配合前端构建流程给静态资源文件名添加内容哈希(例如
app.7a2f9c.js),内容更新时哈希自动变化,不存在旧缓存冲突问题,无需每次部署purge这类资源。
- 匹配条件:URL文件扩展名为
部署后操作流程
每次部署后仅需要执行一次CDN purge操作,清除所有HTML入口文件的CDN缓存即可,用户下次访问时会自动拉取最新的入口文件,进而加载所有新的静态资源。
常见问题说明
你之前操作返回的报错:
{"ErrorMessage":"Invalid RulesEngineConfig: (Header \"Last-Modified\" is not allowed to be modified by the rules engine)."}
属于微软标准CDN的规则引擎原生限制,Last-Modified为系统保留响应头,确实不允许用户自定义修改,上述方案无需修改该头,完全适配标准CDN套餐的限制。
内容的提问来源于stack exchange,提问作者user670186
相关产品推荐
相关产品推荐

