发送 Strict-Transport-Security 标头,但 Chrome 仍在通过 http 请求

Posted

技术标签:

【中文标题】发送 Strict-Transport-Security 标头,但 Chrome 仍在通过 http 请求【英文标题】:Sent Strict-Transport-Security header, but Chrome is still requesting via http 【发布时间】:2019-05-17 08:11:34 【问题描述】:

我正在使用自定义域在 Google App Engine 上运行一个新站点,并且我希望所有流量都通过 https。

我在http://rublonde.com/tmp创建了一个测试脚本:

<?
header("Strict-Transport-Security: max-age=180; includeSubdomains");
print $_SERVER['HTTP_X_FORWARDED_PROTO'];

(站点的内容与域名不匹配,我只是暂时将此域用作自定义域,以便让 HTTPS 标头工作正常。)

在 Google App Engine 中,HTTP_X_FORWARDED_PROTO 将是 httphttps。在第一次加载此页面时,我假设它会获取 HSTS 标头,然后在页面的后续加载中,Chrome 应该会自动通过 https 请求页面。

我是否误解了 HSTS 的工作原理?难道我做错了什么?

【问题讨论】:

【参考方案1】:

啊,我意识到 HSTS 标头在通过 http 连接发送时会被忽略(我认为是因为它们需要与 https 连接附带的有效证书相关联)。

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security#HSTS_mechanism_overview

服务器通过通过 HTTPS 提供标头来实现 HSTS 策略 连接(HTTP 上的 HSTS 标头被忽略)。

【讨论】:

这与与证书关联无关 - 这是一项安全功能。 HTTP 请求可以在传输过程中更改,如果您可以将 HSTS 添加到不支持 HTTPS 的站点,那么您可以针对任何流量被拦截的用户长时间拒绝该站点。只有在通过有效的 HTTPS 连接发送时使用它才能防止这种情况发生。

以上是关于发送 Strict-Transport-Security 标头,但 Chrome 仍在通过 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

本地能正常发送邮件 阿里云服务器端发送邮件提示已经成功了 但是发送不过来 显示 Failure sending mail.

把excel文件用outlook发送时,还要再打开outlook中点击“发送接受”按钮才能发送,能否直接从excel中发送

串口发送数据——字符串发送与十六进制发送的区别

访问PHP发送多个get请求

websocket接收消息再发送会发送两次

ROS串口通信简析(一)——串口发送