我的 Chrome (40.0.2214.115m) 跳转到不存在的 https:
我输入
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。
答案1
Chrome 明确说明了原因:HSTS。一旦收到 HSTS,就会保留。这是概念的重要组成部分。这意味着,如果 Chrome 从您的服务器收到 HSTS 标头,即使只有一次,它也会保留,直到过期。
要检查 Chrome 的 HSTS 缓存,请转到chrome://net-internals/#hsts
。从那里,您可以查询缓存。除非它报告“未找到”,否则 Chrome 会缓存您页面的 HSTS 标头。要删除它,请使用同一页面上提供的工具。