如果我强制实施“严格传输安全”,如何将网站流量发送到 http 端口
例如,如果我嵌入指向 http 端口 8000 的链接,则我强制实施严格传输安全,
访问者将被定向到 https 端口 8000
我需要的结果是,
如果我嵌入一个指向 http 端口 8000 的链接,
访问者就会被定向到 http 端口 8000
谢谢。
答案1
您误解了 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://www.rfc-editor.org/rfc/rfc6797#section-8.3
--
编辑:如果这对您的场景很重要,那么只需额外澄清一点;
请注意,HSTS 并不关心您使用哪个服务器或 IP 地址。一旦您开始从任何地方,你必须服务全部到该域的 HTTP 流量在任何服务器上通过安全连接。
另一方面,如果您拥有一个托管多个域的共享服务器,则未提供 HSTS 标头的域可以继续通过同一服务器的纯 HTTP 进行操作。HSTS 关心的是域,而不是服务器。
因此,如果您在端口 8000 上提供的服务由于某种原因无法通过 HTTPS 运行,那么另一个选择是将其托管在其他域或子域上。如果您选择使用子域,则需要确保 HSTS 标头未设置为包含子域。