HTTP 严格传输安全协议(HSTS, HTTP Strict Transport Security)并不是一个需要在电脑或手机“开机”时手动启动的软件或开关,它是一项由 Web 服务器配置的安全策略,旨在强制浏览器通过 HTTPS 连接访问网站,防止中间人攻击和协议降级攻击。

你无法像开启 Wi-Fi 或蓝牙那样在开机时“开启”HSTS,HSTS 的工作机制是:当你的浏览器首次访问一个支持 HSTS 的网站时,服务器会在响应头中发送一个 Strict-Transport-Security 字段,浏览器接收到这个字段后,会将其记录在本地数据库中,在后续的访问中,即使你在地址栏输入 http://,浏览器也会自动将其转换为 https:// 并尝试连接。
以下是关于 HSTS 的工作原理、如何验证其状态以及如何在服务器端配置的详细指南。
HSTS 的工作原理与“开机”误解解析
HSTS 的核心在于浏览器端的持久化存储和服务器端的策略声明。
- 初始握手:用户首次通过 HTTPS 访问网站。
- 策略下发:服务器在 HTTPS 响应头中包含
Strict-Transport-Security: max-age=31536000; includeSubDomains。 - 本地缓存:浏览器保存该域名及其有效期(max-age)。
- 自动强制:在有效期内,用户再次访问该域名时,无论输入 http 还是 https,浏览器都会强制使用 HTTPS。
为什么不需要“开机”开启?
因为 HSTS 策略是存储在浏览器的本地数据库中的,只要浏览器运行,这些策略就生效,它不需要每次开机重新加载,除非浏览器缓存被清除或策略过期。
如何检查当前浏览器是否启用了 HSTS
虽然你不能“开启”它,但你可以检查你的浏览器是否已经识别并应用了 HSTS 策略。

Chrome / Edge 浏览器检查方法
| 步骤 | 操作说明 |
|---|---|
| 1 | 打开浏览器,访问任意一个支持 HSTS 的网站(如 https://github.com 或 https://www.google.com)。 |
| 2 | 按下 F12 键打开开发者工具,或右键点击页面选择“检查”。 |
| 3 | 切换到 Network(网络) 标签页。 |
| 4 | 刷新页面,点击第一个请求(通常是文档请求)。 |
| 5 | 在右侧的 Headers(标头) 面板中,向下滚动找到 Response Headers(响应标头)。 |
| 6 | 查找是否存在 strict-transport-security 字段,如果存在,说明该网站已启用 HSTS,且你的浏览器已接收并存储了该策略。 |
查看已存储的 HSTS 策略(高级)
在 Chrome 中,你可以查看浏览器当前存储的所有 HSTS 域名列表:
- 在地址栏输入:
chrome://net-internals/#hsts - 在 Query HSTS/PKP domain 部分,输入域名(如
github.com)。 - 点击 Query。
- 如果返回结果中包含
strict-transport-security信息,说明该域名已被浏览器强制使用 HTTPS。
如何在服务器端配置 HSTS
如果你是网站管理员,希望你的网站启用 HSTS 以保护用户,你需要在 Web 服务器上进行配置,以下是常见服务器的配置示例:
Nginx 配置
在 nginx.conf 或站点配置文件中,添加以下头信息:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
max-age=31536000:策略有效期为 1 年(秒)。includeSubDomains:策略也适用于所有子域名。preload:表示希望将该域名加入浏览器的 HSTS 预加载列表(需单独申请)。
Apache 配置
在 .htaccess 文件或虚拟主机配置中添加:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
IIS (Windows Server) 配置
在 web.config 文件中添加:

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
</customHeaders>
</httpProtocol>
</system.webServer>
常见问题与解答
问题 1:如果我清除了浏览器缓存,HSTS 策略会失效吗?
解答:
是的,会失效,HSTS 策略存储在浏览器的本地数据库中,如果你执行了“清除浏览数据”操作,并勾选了“缓存的图片和文件”或“Cookie 和其他站点数据”,HSTS 记录通常会被删除。
- 后果:清除后,下次访问该网站时,浏览器会再次通过 HTTP 发起请求,服务器重新发送 HSTS 头,浏览器重新记录策略。
- 注意:如果你将该域名加入了 HSTS 预加载列表(HSTS Preload List),则即使清除缓存,浏览器在连接该域名时也会强制使用 HTTPS,因为预加载列表是内置在浏览器代码中的,不依赖本地缓存。
问题 2:HSTS 预加载(Preload)是什么?为什么需要它?
解答:
HSTS 预加载是一种机制,允许网站管理员将域名提交给浏览器厂商(如 Google、Mozilla、Microsoft),将其域名硬编码到浏览器的内置 HSTS 列表中。
- 作用:对于预加载列表中的域名,浏览器在第一次访问时(甚至从未访问过该网站的新用户)就会强制使用 HTTPS,而无需等待服务器响应 HSTS 头。
- 好处:彻底防止了首次访问时的 SSL 剥离攻击(SSL Stripping Attack)。
- 要求:申请预加载需要满足严格条件,
- 网站必须全程使用 HTTPS。
- 必须配置有效的 HSTS 头,且
max-age至少为 31536000 秒(1 年)。 - 必须包含
includeSubDomains和preload指令。 - 所有子域名也必须支持 HTTPS。
- 风险:一旦加入预加载列表,无法撤销,如果网站出现问题,用户将无法通过 HTTP 访问,只能通过等待浏览器更新版本或手动清除预加载状态(操作复杂)来解决,申请前务必确保网站 HTTPS 配置稳定可靠。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/489519.html