我的浏览器如何知道需要连接端口443或端口80?

3

这就是我想要做的:

  1. 打开浏览器并浏览任何https网站,如Gmail或Google.com。

  2. 我可以通过Wireshark看到,名称解析是由DNS服务器完成的。

  3. 但之后,连接直接建立到端口443(从TCP握手开始)。

  4. 有一件事我无法理解,浏览器如何知道它需要连接到端口443,我尝试探索DNS数据包,但它只包含目标地址,没有任何信息告诉它需要连接到端口443。

  5. 即使说,浏览器在第一次查询时具有优先级,它会看到如果端口443已打开,则连接到它或连接到端口80,但如果我连接到普通的HTTP网站,我无法看到任何此类行为,也就是说,如果我访问一个普通的HTTP网站,没有来自浏览器的流量表明它首先搜索了端口443,然后转到端口80。

我确信在这里错过了什么,但不确定是什么。

3个回答

4
URL 中出现的 https: 表示使用安全套接层协议。

1
不,我的问题是浏览器如何知道它需要将数据发送到443端口(https)。 - hsengiv86
1
你告诉它浏览到一个HTTPS URL。你是这么说的。当它看到 https: 时,它知道默认端口号是443。否则,你浏览到 http:google.com 并且它得到了一个HTTP重定向,但你没有在数据包嗅探中说你已经看到了它。 - user207421
2
对不起,我觉得我没有解释清楚。我的意思是,在Chrome浏览器中,我只是输入了dropbox.com,它直接带我到了“https版本的dropbox”,但当我嗅探数据包时,我没有看到任何重定向,所以我不确定浏览器如何知道它需要带我去“https版本的dropbox”而不是“http版本的dropbox”。 - hsengiv86
1
@RemyLebeau 但是浏览器最开始是如何知道它应该连接到端口80还是443的? - Ravi Raj
1
@RaviRaj 如果浏览器以前从未访问过某个网站,或者没有跟踪任何HSTS信息,则它根本不知道该网站是使用HTTP还是HTTPS。因此,如果输入的URL没有指定http:https:或明确指定端口,则浏览器别无选择,只能尝试两种方案并查看哪种方案有效。现在HTTPS非常普遍,因此浏览器很可能首先尝试该方案,然后在需要时回退到HTTP。 - Remy Lebeau
显示剩余3条评论

1
浏览器(客户端)使用地址中的HTTP或HTTPS确定要使用哪个端口...但是服务器可以配置为需要HTTPS,并将HTTP端口80连接切换/重定向到带有加密和证书的HTTPS端口443。因此,如果浏览器通过HTTP端口80连接到服务器,则服务器可以立即将连接切换/重定向到HTTPS端口443。服务器甚至可以配置相反的方式,将连接从HTTPS端口443切换/重定向到HTTP端口80。

0

我认为这有点像询问FTP客户端为什么使用FTP端口

除非你用“http://...:port”指定了端口,否则浏览器会使用HTTP的80端口和HTTPS的443端口,因为这是协议定义的,但是......

服务器可能会响应“Strict-Transport-Security:max-age = ... ”,那么浏览器就必须在HTTPS上重试并记住这一点

此外,Chrome,参见HSTS,配备了一个大型预先配置的HSTS列表, 因此,即使您在HSTS列表中的站点中键入http,浏览器也会查看其HSTS配置,发现该站点已被指定,而不是首先尝试在80端口上使用HTTP,而是更改为443端口上的HTTPS


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接