无法从hsts预加载列表中实时撤回域名,因其已硬编码于浏览器静态名单(如chromium的transport_security_state_static.json),各厂商按4–8周周期更新;撤回需人工审核2–6周,且须满足全子域https可用等条件,否则只能通过新子域过渡或环境隔离应对。

不能直接从 HSTS 预加载列表中“移除”已收录的域名——一旦被 Chromium、Firefox、Safari 等主流浏览器采纳进内置预加载表(hstspreload.org),该策略就硬编码在浏览器启动时加载的安全策略中,服务端和客户端均无法主动撤销或覆盖。
为什么无法实时撤回
预加载是浏览器厂商在发布新版本前固化的一份静态名单。提交成功后:
- 你的域名会进入 Chromium 源码中的
transport_security_state_static.json文件 - Firefox 和 Safari 同步采用同一份数据源,更新周期由各厂商自行决定(通常每 4–8 周发布一次新版本)
- 没有 API、控制台指令或配置项能通知浏览器“请删掉这一条”
实际可行的应对路径
若你已误提交、业务变更需降级 HTTP 或子域暂不支持 HTTPS,只能走“等待+隔离+替代”组合策略:
- 提交撤回申请:访问 https://www.php.cn/link/b9fcbc854cc45e5802618e283d3fe525/removal/,填写域名并说明原因(如“子域证书失效”“开发环境需 HTTP 调试”)。Chromium 团队会人工审核,但处理周期通常为 2–6 周,且仅在满足全部条件时批准
-
确保当前所有子域 HTTPS 可用:撤回前提之一是全站(含
www、api、cdn等所有声明过的子域)必须持续返回有效证书 + 正确 HSTS 头 + 301 跳转。任意一个子域不可达,撤回申请会被拒绝 -
改用未预加载的新子域做调试:例如原域
example.com已预加载,可临时启用dev2.example.com或test-new.example.com(未提交过),并在 Nginx 中单独禁用其 HSTS 配置 -
对内网/测试环境彻底隔离配置:用变量或环境判断屏蔽预加载逻辑,例如:
if ($host ~* "^(dev|staging|192\.168\.|localhost)") { add_header Strict-Transport-Security "" always; }避免新设备首次访问即被锁定
浏览器端清理只是临时缓解
清除本地 HSTS 缓存(如 Chrome 的 chrome://net-internals/#hsts)对预加载无效——它只影响“未预加载但曾访问过”的域名。已预加载的域名,即使清空所有浏览器数据、换设备、用无痕模式,首次访问仍强制 HTTPS。
真正安全的退出方式,是让撤回生效 + 所有子域稳定运行 + 用新域名过渡。没有捷径,但提前规划(比如上线前先用 max-age=300 测试两周)可避免陷入被动。











