主题行几乎说明了一切。当您输入网站网址时没有URL 栏中的 HTTP/HTTPS 前缀,我以为 Chrome 总是会优先使用 HTTPS,或者使用历史记录/书签作为指南来决定使用哪一个。
但是,我有一个网站(以及较旧的使用 mediawiki 的网站),同时具有 HTTP 和 HTTPS 版本,尽管我删除了所有 HTTP 历史记录条目和书签,并且该网站上有许多 HTTPS URL 的历史记录条目/书签,但 Chrome 始终为其选择 HTTP。
显然某物关于让 Chrome 选择 HTTP 的网站:有人能解释一下 Chrome 是如何做出这个决定的吗?
答案1
过去默认的协议一直是 HTTP,现在默认的协议仍然是 HTTP,除非浏览器会记住该域名有一个高速传输系统强制所有请求使用 HTTPS 的策略(即使您手动输入 http://)。
(Chrome 包含一个“预加载” HSTS 域列表,这些域始终使用 HTTPS,无一例外。其他域可以通过发送特殊严格传输安全标头——第一次通过 HTTPS 访问此类网站时,浏览器会将其锁定为 HSTS 模式。)
此外,许多网站都提供 HTTP 版本,但始终会使用301‘永久迁移’或其他类似的重定向代码。即使没有设置 HSTS,“永久”重定向也会存储在浏览器的缓存中,这也会导致请求直接转到“新”URL(尽管这是针对每个页面的,而不是针对每个域的)。
两种方法都会在 URL 栏中最终包含“https://”地址,尽管在后台它们的工作方式不同 - HSTS 策略在本地应用(不会发生纯文本请求),而重定向由服务器应用(并且容易被欺骗)。大多数网站结合了这两种方法。
答案2
Apache 或 Nginx 配置告诉浏览器是否应该使用 http 还是 https。
编辑:具体来说,Apache 和 Nginx 虚拟主机决定了域名是否具有 SSL。如果您在第一次通过 http 加载网站时打开浏览器并查看 Chrome 中的网络选项卡,您通常会看到,如果域名具有 SSL,则第一个请求通常是 301 重定向。
浏览器使用域名通过分布式 DNS 服务器连接到服务器。请求到达主机服务器后,Apache 或 Nginx 配置文件指令就会加载。然后将域与配置中的虚拟主机进行比较,如果域匹配,指令会告诉浏览器使用哪个端口。通常,端口 443 是 https,端口 80 是 http。
以下是 VirtualHosts 的样子(Apache)以及它在主机服务器上的设置方式:
https://serverfault.com/questions/744960/configuring-ssl-with-virtual-hosts-under-apache-and-centos
(忽略问题并查看接受的答案)
编辑 2:我忘记了其他内容。同时拥有 https 和 http 虚拟主机不会自动强制重定向。网站可以通过两者加载。重定向通常是通过.htaccess
apache 中的规则或 nginx 中的指令来设置的,这些指令会强制重定向,具体取决于管理员的偏好。所以我下面的评论有些错误。