开了强制跳HTTPS之后想收回来,进预加载名单的门槛是什么
开了强制跳 HTTPS 之后想收回来,进预加载名单的门槛是什么:按规范文档的口径只有两条硬条件,使用 preload 时 max-age 至少要设到 31536000,也就是一年以上,并且必须同时带上 includeSubDomains。卡点通常不在站内的 301 重定向配置,而在有没有把域名提交进浏览器的预加载名单——这两个条件在普通启用时是可选优化,一旦放进名单就变成入场条件,收回的难度也由此而来。
响应头和预加载名单管的不是同一批访客
Strict-Transport-Security 这个响应头只影响已经用 HTTPS 访问过站点的浏览器:它在有效期内记住「这个域名今后要走加密连接」。预加载名单则是另一套机制,域名被提交之后,浏览器在第一次访问前就已经知道要直接用 HTTPS,二者作用的人群与生效时机都不同。
因此「把响应头删掉」和「从名单里退出」是两件事。头可以随时撤,但它撤不掉浏览器已经记住的记录;名单侧的记录也不由站点当天的响应头单方面控制,不会因为某天不再下发 preload 就同步消失。这也是为什么很多站改完配置仍看到浏览器强制跳转。
想收回来时,为什么必须走一次加密请求
规范文档里有一句容易被忽略的说明:按设计,无法通过不安全的 HTTP 关闭 HSTS。要关闭就得把 max-age 设为 0,而这个值只有在浏览器发起一次安全请求并读到响应头之后才生效。
这就产生一个实际顺序问题。如果站点的证书已经到期或 HTTPS 服务被撤下,浏览器拿不到那份带 max-age=0 的响应,旧记录就只能等自然过期。换句话说,收回动作的前提是加密这一层仍然可用,先保证 HTTPS 能正常应答,再谈撤销。
进名单之前该确认的三件事
有效期至少一年意味着这一整年里所有子域都要能走加密连接,includeSubDomains 又把范围扩到每一个子域。上线前建议逐项确认:
- 全站是否都能稳定提供加密连接,包括临时启用的测试子域与老活动页;
- 证书自动续期是否已经落到部署层,一年窗口里不能靠人工记得去续;
- 站内是否有依赖不安全连接的残留,跳过去之后这些引用会直接失败。
第三条在真实改版里最容易出问题。把混合内容清干净再考虑进名单,比进去之后再逐项排查要省力得多。
站内的配置该动哪一层
对以 Go 语言开发的内容管理系统来说,强制跳转与响应头的下发位置要分清楚。AnQiCMS 自身提供 301 重定向的管理能力,用于把旧地址指向新地址;而 Strict-Transport-Security 属于接入层响应头,通常在站点前面的网关或服务器配置里加。部署方式对这一层影响很直接:用宝塔面板或 LNMP 环境时改站点配置文件,用 Docker 镜像部署时改容器里那层服务器配置,程序默认监听的 8001 端口只是应用侧入口,头并不由这一层产生。
改完之后建议用一个干净的浏览器实例验证:先确认加密请求返回的头里 max-age 数值符合预期,再确认旧地址的 301 跳转仍然指向正确目标。
常见问题
问:只在头里去掉 preload 是不是就退出了名单? 答:不是。名单里的记录由提交方按自己的流程维护,站点撤掉头不会让记录自动消失,浏览器仍会在首次访问时强制走加密连接。
问:设 max-age=0 之后为什么还是跳? 答:该值要通过一次安全请求的响应头送达浏览器才生效。若此刻 HTTPS 已经不可用,浏览器读不到这条指令,只能等原记录过期。
问:只在主域开加密、子域还留在明文,可以进名单吗? 答:进名单要求带上子域范围,等于把所有子域一起纳入这一年的承诺。有子域还无法承载加密连接时,应当先解决这一层再决定是否提交。