防止 Google Chrome 将所有具有共同基础的 URL 视为 SSL 连接

防止 Google Chrome 将所有具有共同基础的 URL 视为 SSL 连接

我通过 ISP 提供的 DNS 名称托管多个网站,并使用安装 haproxy 将它们拆分到路由器的 80 端口之外。它对我(我认为是 11 个)唯一网站非常有效,直到我将其中一个网站更改为 https。

现在,Google Chrome 假定我的所有网站都是 https,并且我只能访问 https 的网站 :-(

我怀疑 Chrome 这样做的原因是因为我的所有网站都以我的域名 (myexampledomain.com) 开头,例如网站 1 将是http://myexampledomain.com/website-one/main.html示例网站 2 为https://myexampledomain.com/website-two/main.html出于某种原因,在 chrome 成功访问 https 链接后,非 https 链接会自动以 https 形式访问。删除 s(使其成为 http),chrome 会将其重新添加回去。

当我通过 Internet Explorer 9 访问我的网站时,它们仍然运行良好,或者至少可以在没有自动完成 https 连接的情况下访问。所以,不,我的后端没有 http-to-https 重定向,这只是 Chrome 的愚蠢行为。有谁知道 Chrome 为什么愚蠢,以及是否有办法仍然从 Chrome 访问我的其他网站?我讨厌 IE,使用它让我身体疼痛 ;-)

答案1

(将我们的讨论写成正确的答案:)

Google Chrome(以及所有其他现代浏览器)支持严格传输安全HTTP 标头,告知浏览器“此站点只能通过 HTTPS 访问,因此将来即使用户要求使用 HTTP,也请改为使用 HTTPS。”随着使用 HTTPS 变得越来越普遍,发送此标头已成为新软件和框架的默认设置,因为通常如果设置了 HTTPS(Strict-Transport-Security 标头必须设置 HTTPS 才能生效),最好将其用于所有操作。正如您所发现的,您使用的软件默认配置为以这种方式运行。您在 Internet Explorer 9 中没有看到此行为,因为它太旧,无法支持 Web 的此功能。

两种解决方案是:(1) 更改软件配置以不发送标头,因为您不想强制所有用户使用 HTTPS;或 (2) 更改所有网站以使其通过 HTTPS 正常工作。我通常建议使用第二种选择,因为一旦您配置了服务器并拥有有效的 HTTPS 证书,现在就没有必要在互联网上使用未加密的连接了。

答案2

根据 Peter Cooper Jr. 的评论回复,我的心痛是由于我的 NGINX 安装与 gitlab omnibus 捆绑在一起造成的,它实际上告诉连接客户端他们在与其通信时应该始终使用 https,而在 Gitlab/NGINX 的情况下,安全通信期限设置为 24 个月!

有关 STS 标头的信息:http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Gitlab 安装信息:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md

相关内容