0

Chrome HSTS preload列表更新周期详解:从提交到内置的完整时间线

2026.05.26 | youres | 12次围观

什么是HSTS preload列表

HSTS preload列表是一个硬编码在浏览器中的域名清单,由Google维护,内置在Chrome、Firefox、Safari等主流浏览器的源代码里。只要域名在这个列表里,浏览器会无条件强制HTTPS,即使用户手动输入http://或者点击HTTP链接,也会被自动升级为HTTPS。

这比普通的HSTS响应头更底层——它不需要第一次访问来获取响应头,从用户安装浏览器的那一刻起,你的域名就已经被"记死"为HTTPS-only。

Chrome更新preload列表的周期

Chrome的正式版发布周期是每4周一个大版本(早期是6周,从M94开始改为4周)。每次构建新版本时,会从hstspreload.org拉取最新的已批准域名列表,然后编译进Chrome的二进制文件中。

所以,HSTS preload列表的更新周期 = Chrome的版本发布周期 ≈ 4周

但注意,这里有一个关键的代码冻结(Code Freeze)时间点。每个Chrome版本在进入"稳定版"分支之前,会有一个截止日期。在这个截止日期之前通过审核的域名,才会被包含在这个版本的Chrome中。错过这个窗口,就要等下一个4周。

提交新域名后到底要等多久

这是大家最关心的问题。完整的等待链条是这样的:

  1. 在hstspreload.org提交域名,等待人工审核(通常1-2周
  2. 审核通过后,域名进入"approved"状态,等待下一次Chrome构建窗口
  3. Chrome构建时把域名编入preload列表,发布新版本(4周周期
  4. 用户更新Chrome到新版本(用户可能延迟数周才更新

综合来看,从提交到最终在大部分用户浏览器中生效,通常需要6-12周。这看起来很长,但这是有意设计的——HSTS preload是强约束,一旦进入列表就很难撤销,审核和发布流程必须谨慎。

如何确认当前Chrome版本是否已包含我的域名

有两个方法可以验证:

方法一:chrome://net-internals/#hsts

在Chrome地址栏输入:

chrome://net-internals/#hsts

在"Query HSTS/PKP domain"输入框中填入你的域名,点击Query。如果返回了static_sts_domain信息,说明你的域名已经在当前Chrome版本的preload列表中了。

方法二:查看Chromium源代码

Chrome的preload列表文件是公开可查的,位于Chromium源码仓库:

net/http/transport_security_state_static.json

你可以直接搜索这个文件,查找你的域名,看看它出现在哪个Chrome版本中。

为什么提交后迟迟没有生效

有几个常见原因,逐一排查:

1. HSTS响应头配置不满足要求

hstspreload.org批准域名的前提是,你的服务器必须正确返回HSTS响应头,且同时满足:

  • max-age 至少为 31536000(1年)
  • 包含 includeSubDomains 指令
  • 包含 preload 指令
  • 所有子域名也必须支持HTTPS(因为includeSubDomains)
  • 拥有有效、完整的HTTPS证书链

2. 错过了Chrome代码冻结窗口

即使hstspreload.org批准了你的域名,也需要等到下一次Chrome版本构建时才能进入preload列表。可以查看Chromium发布日程来确认当前版本的状态。

3. 用户还没更新Chrome

即使用户更新Chrome,也不是所有人都会立即更新。根据统计,Chrome用户中有10-20%会在新版本发布后数周才更新。

本地HSTS缓存会干扰验证

即使用户更新了Chrome,如果之前已经访问过你的域名,并且HSTS缓存还在生效期内,浏览器可能不会立即反映preload列表的变化。

正确的验证步骤是:

  1. 打开 chrome://net-internals/#hsts
  2. 在"Delete domain security policies"中输入你的域名,点击Delete
  3. 关闭并重新打开Chrome
  4. 再次访问你的域名,然后用Query功能确认preload状态

加速生效的辅助方案:配置HSTS响应头

在等待preload列表生效的期间,你可以在自己的服务器上先配置HSTS响应头。这样:

  • 新用户:依赖preload列表(等Chrome更新)
  • 老用户:依赖HSTS响应头(立即生效)

两者配合,可以最大限度地覆盖用户。Nginx配置示例:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

注意always参数,它确保即使返回4xx/5xx错误码,HSTS头也会被发送。

Firefox和Safari的更新周期

Firefox的更新周期也是4周,和Chrome同步得比较好。Firefox同样使用从hstspreload.org获取的同一份列表,所以时间线大致相同。

Safari的更新周期和macOS/iOS的版本更新绑定,周期不固定(通常每年2-3次大版本)。但Safari同样内置了同一份preload列表,所以最终效果是一样的——只是Safari用户的生效时间可能更晚一些。

常见问题

Q:提交后能不能撤销?

A:可以,但撤销也需要等待Chrome更新。在hstspreload.org提交撤销申请后,需要等待下一次Chrome版本更新,域名才会从preload列表中移除。等待时间和添加时差不多,也是6-12周。所以提交前一定要确认自己的网站长期支持HTTPS。

Q:子域名需要单独提交吗?

A:不需要。includeSubDomains指令会自动覆盖所有子域名。这也是hstspreload.org要求必须配置includeSubDomains的原因。

Q:如何查看Chromium的preload列表文件?

A:访问Chromium源码仓库,搜索你的域名即可。这个文件有数万行,包含了所有已批准的域名。

相关文章

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论