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 后在 max-age 内升级 HTTP 并覆盖子域与预加载的时间轴
浏览器如何记住并执行 HSTS表现首次访问、max-age 存储、子域继承和预加载的时间差异

为什么 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 吗?

不会立即覆盖离线或未再次访问的客户端,预加载状态也需单独申请移除并等待浏览器版本传播。

权威资料