【问题标题】:Why do we need port number in HOST header of HTTP when we have port number in TCP packet?当我们在 TCP 数据包中有端口号时,为什么我们在 HTTP 的 HOST 标头中需要端口号?
【发布时间】:2021-11-13 23:25:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: http tcp http-headers port packet


    【解决方案1】:

    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 是不同的端点,但它们可以连接到同一个服务器实例。

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

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

    【讨论】:

    • 感谢您的回答,根据wikipedia 我认为HTTP 是L7。 “主机标头中的端口告诉您客户端连接到哪个端点”所以如果我理解正确,您的意思是第一个网络服务器在 80 或 443 上收到请求,然后它可以决定将请求发送到任何地方根据HOST头中指定的端口号处理它想要的应用程序?
    • 或者通过我们的具体实现,我们可以有一个应用程序将请求重定向到服务器中的其他进程,同样根据 HOST 标头中的端口号。
    • 您可以随意使用主机头。请注意,添加端口没有硬性实现。一些较旧的浏览器不会将端口添加到主机标头中,其他浏览器会。
    猜你喜欢
    • 2018-11-26
    • 2015-07-11
    • 2011-03-22
    • 1970-01-01
    • 2019-12-03
    • 2011-04-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多