KNOWLEDGE ARTICLE
HSTS 是什么?
严格传输安全
要求浏览器在一段时间内只通过 HTTPS 访问网站。
核心解释
服务器通过 Strict-Transport-Security 标头声明 HSTS,可减少用户被降级到明文 HTTP 的机会。
HSTS 如何阻止浏览器降级到 HTTP
HSTS(HTTP Strict Transport Security)由 HTTPS 响应中的 Strict-Transport-Security 标头启用。浏览器记住策略后,在有效期内会把对该主机的 HTTP 访问在本地改为 HTTPS,并拒绝让用户轻易绕过证书错误,从而减少首次跳转后的降级与 SSL Stripping 风险。
HSTS 只应通过已经验证的 HTTPS 连接接收,攻击者不能在明文 HTTP 中可靠地为网站设置它。用户首次从未访问过站点时仍可能先发起 HTTP,因此预加载列表可以提前把策略随浏览器发布,但加入前必须满足更严格的全域 HTTPS 条件。
max-age、includeSubDomains 与 preload 分别控制什么
- max-age 表示浏览器记住策略的秒数;设置为 0 用于请求删除已存策略,但已经离线或长期未访问的客户端不会同步收到。
- includeSubDomains 把约束扩展到所有子域,包括当前未启用的网站与旧系统,使用前需要完成完整资产盘点。
- preload 是浏览器维护的预加载机制,不是 RFC 中自动生效的普通指令;提交后撤销与版本传播都需要时间。
- 标头只在 HTTPS 响应中有效,放在 HTTP 跳转响应里不能建立可信策略,CDN 与源站也要避免互相覆盖出不同值。
为什么 HSTS 上线应从短周期逐步扩大
如果某个子域没有有效证书或只支持旧客户端,长周期 includeSubDomains 可能让用户失去访问路径。稳妥流程通常先保证全站 HTTPS 和自动续期,使用较短 max-age 观察,再逐步延长并决定是否覆盖子域与预加载。
迁移域名、关闭服务和更换证书平台时仍要维护 HTTPS,直到主要客户端策略过期。HSTS 不会修复证书错误;相反,它会让错误证书无法通过人工忽略继续访问,因此证书监控必须先可靠。
实际应用与信息解读
可以直接展示 HSTS 是否存在、max-age、子域覆盖和 preload 指令。较长周期可能体现成熟部署,但只有验证所有相关主机和证书后,才能推测策略完整性;单看首页标头不足以确认全部子域。
未看到标头时需确认最终响应是否为 HTTPS、是否经过不同节点,以及其他页面是否一致。明确缺失表示浏览器没有从该响应取得 HSTS,不自然等于 HTTPS 本身无效。
重点关注
HSTS 能加强 HTTPS 使用约束,但启用前需要确认所有相关子域均可稳定使用 HTTPS。
常见问题
HSTS 能替代 HTTP 到 HTTPS 跳转吗?
不能完全替代。新用户首次访问和不支持 HSTS 的客户端仍需要服务器跳转,HSTS 为支持客户端增加本地强制。
includeSubDomains 越安全越好吗?
覆盖更广,但也要求所有现有和未来子域都稳定支持 HTTPS。资产不完整时可能造成业务不可访问。
设置 max-age=0 会立即取消所有用户的 HSTS 吗?
不会立即覆盖离线或未再次访问的客户端,预加载状态也需单独申请移除并等待浏览器版本传播。