首页 > 解决方案 > 当我们在 TCP 数据包中有端口号时,为什么我们在 HTTP 的 HOST 标头中需要端口号?

问题描述

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

在 OSI 模型中,第 4 层负责处理“端口”,在重新组装数据包后,它可以将它们交给正确的应用程序/进程。

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

那么为什么HOST头有这个“端口号”部分,HOST头的这个“端口”如何帮助我们呢?

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

标签: httptcphttp-headersportpacket

解决方案


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

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

添加端口允许会话层指示操作系统使用哪个端口。

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

但是,当您想通过不同的 L4 连接运行其中一个 L5 会话时,用户需要一种方法来指示 TCP 堆栈执行此操作。因此 http 的设计者决定在 URL 的末尾允许一个可选的 TCP 端口。

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

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

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


推荐阅读