先短后长,再作承诺
HSTS 是浏览器在 max-age 到期前不再对该域使用 HTTP 的承诺。策略写错可能让站点数月不可访问。先在 HTTPS 响应上使用较短的 max-age,通过公共边缘验证后再增加。不要在 HTTP 响应上发送该头;浏览器会忽略它,而代理无条件添加会干扰排查。
Strict-Transport-Security: max-age=300
测试后改为 max-age=31536000。只有当每个子域(包括被遗忘的内部或营销主机名)都提供有效 HTTPS 时,才添加 includeSubDomains。浏览器会把策略应用到整个可注册域,而不只是发送头的那个主机。
在边缘验证
应用代码不是设置响应头的唯一位置。CDN、负载均衡器或框架可能再添加一个值。从外网使用 curl -sI 检查并跟随重定向。两个冲突的 HSTS 头无效,可能被忽略。
Preload 是单向门
HSTS preload 列表随浏览器分发。移除可能耗时数月,需要更新提交并等待浏览器版本发布。只对可预见未来内所有子域都仅支持 HTTPS 的域执行 preload。记录决策、日期和负责人。HSTS 不能替代首次访问的 HTTP 到 HTTPS 重定向,也不能保护第一次明文请求。