浏览器如何确定它们应该向哪个端口发出请求?

How do browsers determine the port to which they should make a request?

提问人:Shantik 提问时间:11/15/2023 更新时间:11/15/2023 访问量:46

问:

当浏览器创建对 Web 服务器的请求时,它们会添加一个包含源端口和目标端口的第 4 层标头。源端口是客户端计算机上自由选择的随机端口,而目标端口是 HTTP 的 80 或 HTTPS 的 443。但是,如果 Web 服务器侦听 80 或 443 以外的端口怎么办?请求如何到达目的地?

我知道端口转发,我们也可以直接在URL中指定端口号,格式为PROTOCOL://DOMAIN_NAME:PORT_NUMBER。还有其他方法吗?

HTTP 网络 请求 端口 端口转发

评论

3赞 Remy Lebeau 11/15/2023
你回答了你自己的问题。在浏览器级别,如果请求的 URL 与协议的默认端口不同,则必须显式指定该端口。在网络级别,您必须使用转发代理或端口转发。我不知道任何其他选择。
0赞 Shantik 11/15/2023
雷米,谢谢你的回答。但是,我需要知道我应该在 URL 中指定哪个端口。我可以从 DNS 服务器获取 IP 地址,但如何确定端口号。
2赞 Remy Lebeau 11/15/2023
浏览器无法发现非默认端口。如您所指出的,必须在 URL 本身中预先说明端口。例如,如果 Web 服务器在端口 8080 上侦听 HTTP,则 URL 必须类似于 。然后浏览器会连接到 IP 上的 8080 端口,然后发送一个 HTTP 请求http://hostname:8080/pathhostname/path
0赞 Shantik 11/15/2023
明白了。只是我从未在实际站点 URL 中看到过端口号。最有可能的是,他们使用端口转发或转发代理。谢谢
2赞 Remy Lebeau 11/15/2023
大多数公共站点不使用任意端口,而是使用完善的标准端口。内部站点倾向于使用非标准端口。

答:

0赞 benc 11/15/2023 #1

浏览器通常支持 URL 类型的白名单。

对于是否将它们描述为方案(URL 的前缀)或协议(网络上发生的任何内容),通常存在一些分歧。

但是当浏览器接受 URL 时,如果 URL 中未指定端口号,则将使用默认端口。通常,浏览器有一个内部列表(换句话说,大多数不会服从)。/etc/services

浏览器通常支持各种形式的代理,如“CONNECT”和各种版本的“SOCKS”,但通常浏览器不允许默认端口的可配置重定向,因为这些是广泛分布的最终用户应用程序。

这些代理配置会将所有请求发送到代理服务器的端口。如果你想变得非常花哨,PAC文件允许动态映射代理使用情况。

从编码的角度来看,如果在内部使用 URL 引用,则应始终考虑使用显式端口号。