Azure PaaS环境.Net应用IIS重定向301缓存问题咨询
根因说明
301 (from disk cache)已经直接定位问题:301永久重定向按HTTP规范允许浏览器无限期本地缓存,默认不会触发回源校验。你之前重启应用服务、清除CDN缓存无效的核心原因是,异常缓存不存在于Azure服务端或CDN节点,而是存储在终端用户本地浏览器的磁盘缓存中。无痕模式使用独立的临时缓存空间、不持久化磁盘缓存数据,因此可以正常触发新的跳转规则。
生产环境落地方案
- 立即修改IIS重定向规则的返回状态码,停止返回可被永久缓存的301:将原规则的永久重定向调整为302临时重定向(适配GET类请求)或307临时重定向(适配POST/PUT等非GET请求,不会强制修改请求方法)。如果是通过
web.config配置规则,将action节点的redirectType属性从Permanent改为Found即可,配置示例:
<rule name="你的业务重定向规则" stopProcessing="true"> <match url="^旧路径匹配正则$" /> <action type="Redirect" url="新跳转目标地址" redirectType="Found" /> </rule>
- 给旧重定向路径的响应强制添加禁用缓存头,覆盖存量用户的本地缓存:不要直接下线旧重定向对应的源路径,在该路径的响应逻辑中加入以下响应头,确保用户一旦回源访问该路径,就会自动替换掉本地存储的旧301缓存:
你可以直接通过IIS出站规则、或Azure App Service的应用配置统一添加这组响应头,无需修改业务代码。Cache-Control: no-store, no-cache, must-revalidate, max-age=0 Pragma: no-cache Expires: 0 - 针对存量用户做临时路径兼容:如果旧重定向路径是对外暴露的固定入口(比如官网首页、活动落地页路径),可在所有对外入口的旧路径后拼接任意唯一查询参数(比如
/old-path?cachefix=20240520),带不同查询参数的URL会被浏览器识别为全新资源,不会命中本地已有的301磁盘缓存,直接回源拉取新规则。该方案可以在规则上线后立刻覆盖所有从官方入口进入的用户,等待2-4周(覆盖绝大多数普通用户的浏览器自然访问周期)后即可移除参数。 - CDN层补充兜底配置:重新配置CDN节点上对应重定向路径的缓存规则,设置为不缓存、每次请求回源校验,同时给CDN返回的重定向响应也加上上述禁用缓存头,避免边缘节点存储旧301响应返回给新用户。
注意:所有缓存兜底逻辑必须配置在用户本地缓存记录的旧源路径上,不要仅在新跳转目标路径做配置——本地缓存命中301时,浏览器不会发起对新目标地址的请求,新路径的配置完全不会生效。
内容的提问来源于stack exchange,提问作者Imad
相关产品推荐
相关产品推荐

