跳到主内容
快讯直播
AI智模界
AI 词典

HSTS:让浏览器从此只走 HTTPS 的那道死命令

HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)是一个 HTTP 响应头。它的作用是让浏览器记住“这个域名以后一律用 HTTPS 访问”,并且在这个策略的有效期内不许退回 HTTP。

先看没有 HSTS 时会发生什么。用户在地址栏敲 example.com,浏览器默认先发一个明文 HTTP 请求,服务器返回 301,让浏览器跳转到 HTTPS。这一次明文请求最容易出问题:在咖啡店 Wi-Fi 里,攻击者可以抢在真服务器之前伪造一个 301,把用户留在 HTTP 上。这就是所谓的 SSL 剥离(SSL Stripping,又称 SSL 降级攻击)。HSTS 的做法相当于在浏览器里贴了一张长期告示:凡是访问这个域名,先在你这边把 http 换成 https,不要再发明文请求问服务器。明文请求根本不发出去,中间人也就没有插话的机会。

服务器通过响应头下发这条指令,形如:

```

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

```

max-age 是这条告示的有效期,单位是秒,浏览器会把它保存在本地。includeSubDomains 表示这条告示也覆盖所有子域名;preload 是申请把自己的域名加入浏览器厂商的内置列表,让用户第一次访问时就已经被强制走 HTTPS。

为什么 max-age 配错会让网站直接打不开? 关键在于 HSTS 由浏览器在本地执行,服务器没有“撤回”按钮。你把响应头删掉,浏览器也不会理会,它会按上次记下的时间继续强制 HTTPS。此时如果证书出问题,比如过期、域名不匹配、证书链不完整或是自签证书,平时浏览器还会给一个“高级 → 继续访问”的临时入口,但在 HSTS 策略下这个入口会被禁用,用户只能看到证书错误页。如果再加上 includeSubDomains,所有子域名都会一并受影响;如果 max-age 设成一年,最坏情况就要等一年;如果再选了 preload,就必须走申请流程把域名移出内置列表,还要等新版本浏览器铺开生效。这就是很多团队“改了一个配置,线上直接挂掉”的典型现场。应急办法是在自己机器的浏览器里删掉 HSTS 记录(Chrome 系在 chrome://net-internals/#hsts,其他浏览器有类似入口,以实际界面为准),但这只能救你这一台机器,救不了所有用户。

手段谁在执行首次访问是否明文能否中途撤回
301/302 跳转服务器是(有明文窗口)随时
HSTS 响应头浏览器本地缓存首次是,之后否只能等 max-age 到期
HSTS preload浏览器内置列表否需申请移出,等版本更新

与 HTTPS、证书的区别也要说清:证书解决“这条加密通道是否可信”,HSTS 解决“浏览器会不会主动去用这条通道”。它也不是 CSP 里的 upgrade-insecure-requests,后者管的是页面内部的混合内容资源。

对从业者来说,实际建议很简单:新站上线先用几百秒的小 max-age 验证,确认证书覆盖了所有子域名,再逐步加大;不要在测试域名或临时域名上随手加 includeSubDomains,更不要为了“安全评分”盲目提交 preload。对普通人来说,看到“你的连接不是私密连接”并且没有“继续访问”的按钮,大概率是这个站开了 HSTS 而证书挂了。问题不在你的网络,也不在你会不会点。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。