TCP数据包中有端口号,为什么HTTP的HOST header中需要端口号?

Why do we need port number in HOST header of HTTP when we have port number in TCP packet?

我知道 HOST header 如何帮助我们在一个 IP 地址上拥有多个网站。在 HOST header 中,我们可以选择指定“端口号”。 (HTTP 默认为 80)

在OSI模型中,layer-4负责处理“端口”,重组数据包后,它可以将它们交给正确的application/process。

另一方面,HTTP 工作在 OSI 的第 7 层。所以在这一点上,我认为应用程序已经收到了正确的数据包并且知道端口号。

那为什么HOSTheader会有这个“端口号”部分,HOSTheader的这个“端口”对我们有什么帮助呢?

另外我想知道它们是否不同或者可以不同吗?

URL 中的端口与用于 TCP 连接的端口相同,并且与主机 header 中的端口相同。

该协议属于第 5/6 层,但绝对不是第 7 层。您可能会说它是第 6 层,但如果它是加密的,则可能不是,在这种情况下,TLS 将是 l5 和 http l6。

添加端口允许 session 层指示 OS 使用哪个端口。

对于某些 L5 协议,应用程序知道默认端口,例如 http(80) https(443) ftp(21).

但是,当您希望通过不同的 L4 连接 运行 其中一个 L5 session 时,用户需要一种方法来指示 TCP 堆栈执行此操作。因此 http 的设计者决定在 URL.

末尾允许一个可选的 TCP 端口

主机中的端口 header 告诉您客户端连接到哪个端点。例如 abc.com:80 和 abc.com:81 是不同的端点,但它们可以连接到同一服务器实例。

虽然服务器确实可以通过查看套接字确定用户连接到哪个端口,但服务器实现可能不支持这一点,或者将来可能需要保留它。

如果您的服务器需要主机上的端口 header 成为实现和需求的问题。