我的 Chrome“跳转到”不存在的 HTTPS 协议

我的 Chrome“跳转到”不存在的 HTTPS 协议

我的 Chrome (40.0.2214.115m) 跳转到不存在的 https:

我输入

http://johnwhitech.homeip.net:8080/

Chrome 会重定向至

http://johnwhitech.homeip.net:8080/

不存在。我知道不是到处都有 HTTPS。

在网络分析器中,我看到我的服务器回答了一个 307 重定向,这是不对(apache 配置正确并且没有给出这个答案,其他浏览器没有重定向,HTTP 数据包循环完全正常)。

我尝试使用 Fiddler 记录请求,如下所示:

连接johnwhitech.homeip.net:8080 HTTP/1.1

主机:johnwhitech.homeip.net:8080

连接:保持连接

用户代理:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML,如 Gecko)

Chrome/40.0.2214.115 Safari/537.36

发现与 SSLv3 兼容的 ClientHello 握手。Fiddler 提取了以下参数。

...

另一件奇怪的事情是:在 Fiddler 的 HOST 列中,如果我尝试使用 Firefox,我会看到我的服务器名称。使用 Chrome,即使是第一个请求,我也只能看到“Tunnel to...”。协议确实是 HTTP(查看数据包的开头),但为什么我的 Chrome 会随它一起发送 SSL“ClientHello”?

这是正常行为吗?

我看到的唯一可能与 SSL 相关的事情是我安装了一个自签名证书,首先通过 chrome 设置,然后是系统范围的。此证书运行良好,但也许由于域名与列表中的证书匹配,chromes 会尝试 SSL?

谢谢大家!


EDIT3:这种行为也会在没有互联网连接(清除缓存)的情况下发生,所以肯定不是在服务器端


EDIT4:我在 Chrome Dev Tools 的“NETWORK”选项卡中看到的内容。第一个条目是正常的,第二个条目是通过 HTTP 的,它会立即重定向到 HTTPS。这种情况发生在没有网络连接的情况下,特别是服务器不是正在发送 HSTS。

https://i.stack.imgur.com/xfoxA.png

答案1

Chrome 明确说明了原因:HSTS。一旦收到 HSTS,就会保留。这是概念的重要组成部分。这意味着,如果 Chrome 从您的服务器收到 HSTS 标头,即使只有一次,它也会保留,直到过期。

要检查 Chrome 的 HSTS 缓存,请转到chrome://net-internals/#hsts。从那里,您可以查询缓存。除非它报告“未找到”,否则 Chrome 会缓存您页面的 HSTS 标头。要删除它,请使用同一页面上提供的工具。

相关内容