为什么RFC 禁止服务器通过 HTTP 向客户端发送 HSTS?
我可以看到,如果 HTTP 客户端响应该不安全的 HTTP 响应,它可能会导致客户端无法访问该站点,但我看不出服务器有任何理由在协议中具有 MUST。
在我看来,客户端不能在不安全的 HTTP 响应中响应 HSTS 是正确的方法。我错过了什么?
如果 HSTS 主机通过非安全传输接收 HTTP 请求消息,它应该发送包含指示永久重定向的状态代码的 HTTP 响应消息,例如状态代码 301([RFC2616] 的第 10.3.2 节),以及包含 HTTP 请求的原始有效请求 URI(参见第 9 节(“构建有效请求 URI”))的位置标头字段值根据需要更改为具有“https”的 URI 方案,或者根据本地策略生成的 URI “https”的 URI 方案。
注意:上述行为是“应该”而不是“必须”,因为:
服务器端非安全到安全重定向的风险 [ OWASP-TLSGuide ]。
站点部署特征。例如,包含第三方组件的站点在通过非安全传输访问时进行服务器端非安全到安全重定向时可能无法正确运行,但在通过安全传输统一访问时运行正确。后者是给定一个支持 HSTS 的 UA 的情况,该 UA 已经将该站点标记为已知 HSTS 主机(通过任何方式,例如,先前的交互或 UA 配置)。
HSTS 主机不得在通过非安全传输传送的 HTTP 响应中包含 STS 头字段。