域名加入hsts预载表需先全站https化并满足硬性条件:主域及所有子域必须部署有效tls证书、http强制301跳转https、https响应头含max-age=31536000、includesubdomains和preload,且错误页也须带hsts头;提交至hstspreload.org后经人工审核生效,撤回极难。

要让域名成功加入全球主流浏览器(Chrome、Edge、Firefox)的内置 HSTS 预载表(preload list),光在响应头里写上 includeSubDomains 和 preload 是不够的——它们是申请资格的硬性门槛,不是开关按钮。必须先确保整个域名生态已完全 HTTPS 化,再按规范提交。
includeSubDomains 的实际作用与启用前提
includeSubDomains 不是“可选增强项”,而是策略生效范围的强制扩展:
一旦启用,所有一级子域名(如 www.example.com、api.example.com、shop.example.com)都必须能通过 HTTPS 正常访问,且响应中每个请求(包括 404、500、重定向页面)都要携带合法 HSTS 头。
- 若
dev.example.com还没配证书或监听 443 端口,用户访问它会直接失败(浏览器拒绝降级) - 子域名不能只靠 HTTP 301 跳转到主站——它自己必须独立支持 HTTPS
- 建议上线前用工具扫描全量子域:
curl -I https://sub.example.com确认状态码 2xx + 有 HSTS 头
preload 的真实含义与不可逆性
preload 参数本身不触发预载,它只是向浏览器发出一个“我准备好了,请审核收录”的信号。真正生效需满足全部条件,并手动提交至 https://www.php.cn/link/b9fcbc854cc45e5802618e283d3fe525:
- 主域名和所有
includeSubDomains覆盖的子域,必须全部部署有效 TLS 证书(支持 TLS 1.2+,禁用弱加密套件) - 所有 HTTP 请求(含
http://example.com、http://api.example.com)必须返回 301 永久重定向到对应 HTTPS 地址,不能返回任何明文内容 - HTTPS 响应头中
Strict-Transport-Security必须包含:-
max-age=31536000(至少 1 年,低于此值无法通过审核) includeSubDomainspreload
-
- 错误页面(如 404、500)也必须返回该 HSTS 头(Nginx 用
always参数,Apache 用Header always set)
提交 preload 的操作流程
- 访问 https://www.php.cn/link/b9fcbc854cc45e5802618e283d3fe525,输入你的主域名(如
example.com) - 系统自动检测是否满足全部条件(证书、重定向、HSTS 头完整性、子域 HTTPS 可达性等)
- 检测通过后点击 Submit,进入 Chromium 团队人工审核队列(通常数天到两周)
- 审核通过后,域名会被写入
chrome/browser/net/spdy/spdy_session_pool.cc等源码文件,随浏览器更新分发给全球用户 - 一旦加入,撤回极其困难:需等待至少 1 年(从列表中移除后,旧版本浏览器仍会缓存该策略)
实际配置示例(以 Nginx 为准)
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# 全局启用 HSTS,覆盖所有响应(含错误页)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# ……其他 SSL 配置
}
注意:
- 不要在 HTTP server 块中设置 HSTS(浏览器直接忽略)
-
always参数必不可少,否则 4xx/5xx 响应不带 HSTS 头,导致 preload 审核失败
不复杂但容易忽略











