文档首页> 技术教程> HSTS 是什么:要不要给你的站开

HSTS 是什么:要不要给你的站开

发布时间:2025-11-10 20:27        更新时间:2025-11-10 23:39
HSTS 的全称是 HTTP Strict Transport Security(HTTP 严格传输安全),一句话概括它的作用:告诉浏览器,这个站点今后只准用 HTTPS 访问。服务器在 HTTPS 响应里加一个响应头: add_header Strict-Transport-Security "max-age=31536000" always; 浏览器收到后,在 max-age 指定的秒数内访问这个域名,都会在本地直接把请求改成 https://,用户手输 http:// 也一样,连 301 跳转那一次请求都省了。 它和 301 跳转的差别 301 每次都要服务器参与,请求先到服务器再被赶去 HTTPS,中间多一个往返;HSTS 的改写发生在浏览器本地,请求从发出那一刻就是 HTTPS。更重要的是安全性:301 方案下,中间人可以把用户的 HTTPS 请求降级成 HTTP 再劫持,HSTS 让这类降级攻击在浏览器层面就走不通。 max-age 是关键字段 单位是秒,31536000 就是一年。另一个参数 includeSubDomains 会把强制范围扩大到所有子域,一旦带上,每个子域都必须配好 HTTPS,否则哪个忘了配证书的子站会被连带打不开,这是它最常见的翻车点。预加载列表(让新用户第一次访问就强制 HTTPS)提交之后几乎无法撤销,没想清楚不要提交,对多数站点来说分阶段开到一年已经足够。 为什么开了就难回退 HSTS 是单向开关。浏览器一旦记住,服务器想退回 HTTP 做不到——浏览器在本地就把请求改写成 HTTPS,服务器连拦截的机会都没有。平时 reload 一下能解决的证书问题、配置失误,在 HSTS 生效期内都可能变成整站不可访问。真出问题时,只能让用户清除浏览器的 HSTS 记录(各浏览器都有调试入口),这种补救对普通用户基本不可操作。 分阶段的打开方式 第一次先设一个很小的值试运行: Strict-Transport-Security "max-age=300" 观察几天没有异常,放大到 2592000(一个月),稳定后再到 31536000(一年)。每个阶段的验收点相同:整站资源无 http 引用、所有子域证书齐备、证书续期监控在位。整站还没全部 HTTPS 化的站点,结论很简单:先别开,HTTPS 全覆盖是前提条件。