IIS中配置HSTS需满足:有效SSL证书、HTTPS绑定、HTTP→HTTPS 301跳转;在web.config添加Strict-Transport-Security头,含max-age与includeSubDomains;生效后浏览器强制HTTPS且不可立即撤销。
在 iis 中配置 hsts,本质是让服务器通过 https 响应头告诉浏览器:“这个域名只允许用加密连接访问”,从而杜绝 http 明文请求被劫持的风险。它不是跳转机制,而是一种“浏览器本地记忆式强制策略”——只要用户成功用 https 访问过一次,之后哪怕手动输 http://,浏览器也会自动改写为 https:// 并阻止明文发出。
前提必须全部满足
缺一不可,否则 HSTS 头根本不会被浏览器接收或生效:
- 站点已部署有效、受信且未过期的 SSL/TLS 证书(自签名证书会被浏览器拒绝,HSTS 不触发)
- IIS 已正确绑定 HTTPS(443 端口),且能正常响应
https://yourdomain.com - HTTP 到 HTTPS 的强制跳转已开启(推荐 301 跳转),确保用户首次访问也能顺利走 HTTPS,完成 HSTS 首次同步
- 不能只配 HSTS 而不配 HTTPS 跳转:如果用户第一次用 HTTP 访问,又没跳转,就收不到 HSTS 响应头,策略永远无法建立
在 web.config 中添加 Strict-Transport-Security 响应头
打开网站根目录下的 web.config 文件(若不存在可新建),在 <system.webServer> 节点内插入以下配置:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
</customHeaders>
</httpProtocol>
</system.webServer>
说明:
-
max-age=31536000表示一年有效期(365 天 × 24 × 3600),这是生产环境推荐值;测试阶段可用3600(1 小时)便于验证和回滚 -
includeSubDomains表示主域及所有子域名(如api.example.com、www.example.com)均受 HSTS 约束——请确认所有子域名都已支持 HTTPS,否则会导致子域名无法访问 - 该配置仅对 HTTPS 请求生效,无需也不应在 HTTP 绑定中添加
验证是否生效
部署后,用浏览器开发者工具(F12 → Network → 刷新页面 → 点击任意 HTTPS 请求)查看响应头,确认包含:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
Strict-Transport-Security: max-age=31536000; includeSubDomains
也可用命令行快速验证:
curl -I https://yourdomain.com
输出中应出现上述头信息。注意:若返回 301 跳转而非 200,需检查跳转链路是否最终抵达了带 HSTS 头的 HTTPS 页面。
重要提醒与常见陷阱
HSTS 是一把双刃剑,配置后不可立即撤销:
- 关闭 HSTS 后,浏览器仍会按原
max-age时间继续执行策略,直到过期 - 误加
includeSubDomains但某个子域名 HTTPS 未就绪,会导致该子域名完全无法加载(浏览器直接拦截,不发请求) - 若证书异常(如过期、域名不匹配、链不完整),浏览器会拒绝加载 HSTS 策略,甚至可能显示全屏错误页(尤其 Chrome)
- 如需提交至浏览器预加载列表(首次访问即强制 HTTPS),须额外满足:全站 HTTPS + HSTS 头含
preload参数 + 提交至 hstspreload.org 审核通过

















