如果强制执行 Strict-Transport-Security,我如何将网站流量发送到 http 端口
例如,
如果我嵌入了一个指向 http 端口 8000
的链接,访问者将被定向到 https 端口 8000 ,我就会强制执行 Strict-Transport-Security
我需要的结果是,
如果我嵌入了一个指向 http 端口 8000
的链接,访问者将被定向到 http 端口 8000
谢谢。
您误解了 HSTS(HTTP 严格传输安全)的工作方式。如果您启用此标头,则支持 HSTS 的客户端浏览器应拒绝在任何端口上与您的域(可能还有所有子域)建立纯 HTTP 连接。
如果用户尝试连接到http://www.example.com/(隐含端口 80),则浏览器将自动更改为该https://www.example.com/(隐含端口 443)
如果用户尝试连接到http://www.example.com:8000/(或 80/443 以外的任何端口),则浏览器会自动将其更改为https://www.example.com:8000/(或指定的任何端口)。
如果您启用 HSTS,那么您必须准备好通过安全连接为您的域提供所有HTTP 流量。
我不知道你做了什么来解决这个问题,但无论它是否有效都违反了 HSTS 规范,即使它现在有效,将来也可能停止工作。
正确的答案是正确配置端口 8000 以通过安全连接为流量提供服务。
有关更多详细信息,请参阅 RFC 第 8.3 节 https://tools.ietf.org/html/rfc6797#section-8.3
——
编辑:如果这在您的场景中很重要,请多加说明;
请注意,HSTS 并不关心您使用的是哪个服务器或 IP 地址。一旦您开始从任何地方为特定域提供标头,您必须通过安全连接在任何服务器上为该域提供所有HTTP 流量。
与此相反的一面是,如果您有一个托管多个域的共享服务器,则不提供 HSTS 标头的域可以继续通过来自同一服务器的纯 HTTP 运行。HSTS 关心域,而不是服务器。
因此,如果您在端口 8000 上拥有的服务出于某种原因绝对无法通过 HTTPS 运行,那么另一种选择是将其托管在不同的域或子域上。如果您选择使用子域,则需要确保未将 HSTS 标头设置为包含子域。