HTTP严格传输安全协议怎么看配置?HSTS配置方法详解
- 云服务器
- 2026-07-05
- 5
HTTP 严格传输安全(HSTS, HTTP Strict Transport Security)是一种 Web 安全策略机制,它允许 Web 服务器声明浏览器或其他可接受协议的用户代理,只能以 HTTPS 连接访问该资源,配置 HSTS 可以有效防止协议降级攻破(如 SSL Stripping)和 Cookie 截持。
要查看和验证 HSTS 配置是否生效,通常需要从服务器端配置、浏览器端响应头检查以及在线工具测试三个维度进行,以下是详细的查看与分析方法。
理解 HSTS 响应头字段
HSTS 是通过 HTTP 响应头中的 Strict-Transport-Security 字段来生效的,要查看配置,首先必须理解该字段的组成结构,一个标准的 HSTS 头通常包含以下部分:
| 字段/参数 | 说明 | 示例值 |
|---|---|---|
| max-age | 必需,指定浏览器应将此策略保持多长时间(以秒为单位),在此期间内,浏览器会自动将 HTTP 请求转换为 HTTPS。 | max-age=31536000 (1年) |
| includeSubDomains | 可选,如果存在此指令,HSTS 策略将应用于当前主机名及其所有子域名。 | includeSubDomains |
| preload | 可选,如果存在此指令,表示网站所有者希望将该域名列入浏览器的 HSTS 预加载列表中,列入后,即使第一次访问也是强制 HTTPS。 | preload |
注意:HSTS 策略仅在浏览器成功通过 HTTPS 连接并收到该响应头后才会生效,如果用户第一次访问的是 HTTP 页面,HSTS 头不会出现在该 HTTP 响应中,因此无法立即生效。
通过浏览器开发者工具查看配置
这是最直观、最常用的本地验证方法,你可以按照以下步骤检查当前网站是否配置了 HSTS:
- 打开开发者工具:
- 在 Chrome、Edge 或 Firefox 中,按下
F12 或 Ctrl+Shift+I (Mac: Cmd+Option+I) 打开开发者工具。
- 在 Chrome、Edge 或 Firefox 中,按下
- 切换到网络(Network)标签页:
刷新页面,确保加载了主要资源。

- 查找响应头:
- 在请求列表中,点击第一个请求(通常是文档本身,即 index.html 或域名根路径)。
- 在右侧面板中找到 Headers(标头)选项卡。
- 向下滚动至 Response Headers(响应标头)部分。
- 确认 HSTS 头存在:
- 查找名为 Strict-Transport-Security 的字段。
- 关键点:确保你是在 HTTPS 协议的请求中查看此头,如果在 HTTP 请求中看到此头,那是错误的配置,因为 HSTS 必须通过 HTTPS 传输才能被浏览器信任。
示例输出:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
通过命令行工具(cURL)查看配置
对于服务器管理员或需要自动化测试的场景,使用 cURL 命令可以清晰地查看原始响应头。
命令示例:
curl -I https://www.example.com
输出解读:
在返回的 HTTP 响应头中,寻找 strict-transport-security 行。
- 如果配置正确:你会看到类似 strict-transport-security: max-age=31536000; includeSubDomains 的输出。
- 如果未配置:该字段将不会出现。
- 如果配置错误:例如在 HTTP 响应中返回了 HSTS 头,虽然 cURL 会显示它,但浏览器不会应用该策略,且这违反了 HSTS 的安全规范。
检查 HSTS 预加载状态
如果配置中包含了 preload 指令,或者你希望网站被预加载,需要访问专门的预加载列表网站进行查询。

- 访问 HSTS Preload 网站:
- 输入域名:
- 在搜索框中输入你的域名(example.com)。
- 查看结果:
-
Ready to submit:表示配置正确,可以提交预加载列表。
- Already enrolled:表示已列入预加载列表。
- Not ready:表示配置存在问题(如 max-age 不足、缺少 includeSubDomains、HTTP 重定向未正确配置等),需要修复后重新检查。
-
常见配置错误排查
在查看配置时,可能会遇到以下常见问题,导致 HSTS 看似配置了但实际未生效:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| HTTPS 页面无 HSTS 头 | 服务器未配置响应头;或配置在 HTTP 重定向规则中而非 HTTPS 服务中。 | 在 Web 服务器(Nginx/Apache/IIS)的 HTTPS 监听配置中添加 add_header Strict-Transport-Security ...。 |
| HTTP 页面返回 HSTS 头 | 配置错误,HSTS 头被放在了 HTTP 响应的重定向规则中。 | 移除 HTTP 响应中的 HSTS 头,确保仅在 HTTPS 响应中发送。 |
| 子域名未生效 | 缺少 includeSubDomains 指令。 | 在 HSTS 头中添加 includeSubDomains。 |
| 浏览器忽略策略 | max-age 设置过短(建议至少 31536000 秒,即 1 年)。 | 将 max-age 设置为至少 31536000。 |
不同 Web 服务器的配置示例
为了帮助你正确配置,以下是主流 Web 服务器的 HSTS 配置片段:
Nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
IIS (web.config):
<system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" /> </customHeaders> </httpProtocol> </system.webServer>
相关问题与解答
问题 1:如果我在 HSTS 配置中设置了 max-age=0,会发生什么?
解答:
设置 max-age=0 是一种特殊的 HSTS 指令,用于告诉浏览器撤销之前对该域名应用的 HSTS 策略。
- 作用:如果你之前启用了 HSTS,现在想暂时禁用它(例如进行维护或测试),可以设置 max-age=0,浏览器收到此响应后,会清除本地存储的该域名的 HSTS 状态,允许用户再次通过 HTTP 访问。
- 注意:这仅对已经应用过 HSTS 的浏览器有效,对于新访问者,max-age=0 等同于没有 HSTS 策略,不会强制 HTTPS,在生产环境中,除非有特殊需求,否则不应使用此值作为常规配置。
问题 2:HSTS 预加载(Preload)列表有什么风险?为什么不能随意提交?
解答:
HSTS 预加载列表被硬编码在主流浏览器(Chrome, Firefox, Safari, Edge 等)中,一旦域名被列入预加载列表,即使浏览器从未访问过该网站,也会强制使用 HTTPS 连接。
- 主要风险:
- 不可逆性:一旦提交并被接受,很难从列表中移除,移除过程非常缓慢且复杂,因为需要等待浏览器更新。
- 配置错误导致服务中断:如果提交的域名配置有误(SSL 证书过期、缺少子域名支持、或 HTTP 重定向失败),所有使用该浏览器的用户将无法访问该网站,因为浏览器会强制尝试 HTTPS 而服务器无法提供有效响应。
- 子域名影响:如果使用了 includeSubDomains,所有子域名也必须正确配置 HTTPS,否则整个域名族都会受影响。
- 建议:在提交预加载列表前,务必使用 hstspreload.org 进行严格检查,并确保所有子域名都稳定运行在 HTTPS 上。