# HSTS 预加载（HSTS Preload）是什么？

> HSTS 预加载是内置在浏览器中的一份域名列表，列表内的域名始终通过 HTTPS 访问，连首次访问、尚未收到 HSTS 头之前也受保护。

Source: https://ssl.sh/zh/glossary/hsts-preload/
Last updated: 2026-11-10

HSTS 预加载列表由 Chromium 项目维护，通过 hstspreload.org 提交；Chrome、Firefox、Safari 和 Edge 内置的列表都源自它。被预加载的域名及其全部子域名直接写进浏览器，即便是刚装好的浏览器也不会对它发出任何明文 HTTP 请求。整个顶级域也可以预加载，例如 `.app` 和 `.dev`，所以这些后缀的网站从上线第一天起就必须支持 HTTPS。

## 为什么重要
普通的 [HSTS](https://ssl.sh/zh/glossary/hsts/) 依赖浏览器之前见过这个响应头，首次访问仍可能遭到 [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/)。预加载补上了这个缺口，但承诺很重：只能提交可注册域名（`example.com`，而不是 `www.example.com`）；要有有效证书，同一主机上把 HTTP 跳转到 HTTPS，并下发包含 `includeSubDomains`、`preload` 且 `max-age` 不少于一年（31536000 秒）的 HSTS 头。加入后，浏览器可能访问到的每个子域名，包括内网管理后台，都必须能走 HTTPS。移除是可以申请的，但要跟随浏览器版本发布才生效，旧版浏览器会一直保留这条记录。

## 例子
申请预加载的域名在 `https://example.com` 上应返回：

```text
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
```

提交前先用 [HSTS 检测工具](https://ssl.sh/zh/tools/hsts-checker/)看看主域名实际返回的头，并把在用的子域名逐一列出来核对。

## 常见误区
- **响应头里写上 preload 就进列表了。** 这个指令只表示同意，还需要提交、审核通过，再随浏览器版本发布。
- **预加载随时可以撤销。** 移除要经过一个浏览器发布周期才能到达用户，不再更新的旧浏览器会永久保留，应视为不可逆。
- **只影响主站。** `includeSubDomains` 覆盖所有子域名，域名下只支持 HTTP 的设备管理页面或内部工具会在浏览器中打不开。

## 相关术语

- [HSTS](https://ssl.sh/zh/glossary/hsts/): HSTS 是一个 HTTP 响应头，告诉浏览器在指定时间内只通过 HTTPS 访问该站点，并且遇到证书错误时不允许用户继续访问。
- [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/): SSL 剥离是一种中间人攻击，攻击者截获本应把用户引向 HTTPS 的跳转或链接，让用户一直停留在明文 HTTP 上。
- [HTTPS](https://ssl.sh/zh/glossary/https/): HTTPS 是在 TLS 加密连接之上传输的 HTTP，默认使用 443 端口，使网页内容、Cookie 和表单数据被加密，并验证服务器身份。
- [混合内容](https://ssl.sh/zh/glossary/mixed-content/): 混合内容是指通过 HTTPS 加载的页面中，部分脚本、图片、iframe 等子资源仍通过明文 HTTP 加载，削弱了整个页面的安全性。
- [中间人攻击](https://ssl.sh/zh/glossary/man-in-the-middle/): 中间人攻击是指攻击者暗中插入通信双方之间，转发并可能篡改流量，而双方都以为自己在直接和对方通信。
