HTTP 协议无连接且默认使用 TCP,这有啥意义?

Posted

技术标签:

【中文标题】HTTP 协议无连接且默认使用 TCP,这有啥意义?【英文标题】:HTTP protocol connectionless and use TCP by default, How does that make sense?HTTP 协议无连接且默认使用 TCP,这有什么意义? 【发布时间】:2021-10-23 09:56:48 【问题描述】:

我读到 HTTP 协议默认使用可靠的 TCP 连接 ,并且 HTTP 功能之一是无连接的。 现在我很困惑这有什么意义? 它如何使用 TCP,同时它是无连接的,据我所知 TCP 是面向连接的

【问题讨论】:

【参考方案1】:

HTTP 和 TCP 是不同的东西。 TCP 是传输层协议,而HTTP 是应用层协议。 HTTP 使用 TCP 进行数据传输。

IMO this 网站有一个很好的解释:

HTTP 是无连接的: HTTP 客户端,即浏览器发起 HTTP 请求,请求发出后,客户端等待响应。服务器处理请求并在客户端断开连接后发回响应。因此客户端和服务器仅在当前请求和响应期间相互了解。在新连接上发出进一步的请求,例如客户端和服务器彼此是新的。

然而,***将 HTTP 定义为无状态:

HTTP 是一种无状态协议。无状态协议不要求 HTTP 服务器在多个请求期间保留有关每个用户的信息或状态。但是,一些 Web 应用程序使用例如 HTTP cookie 或 Web 表单中的隐藏变量来实现状态或服务器端会话。

根据他们的解释,这些术语似乎可以互换使用。然而,这些都不是真的,因为使用中的 HTTP 版本允许您通过 cookie 等识别用户并创建persistent 连接。

【讨论】:

好吧,那太好了,因为 HTTP 是无连接的,这意味着它就像 UDP 对吧?在应用层它是无连接的,而在传输层是如何使用面向连接的,这就是让我对 HTTP 感到困惑的原因?你能说得清楚一点吗? 不,无连接意味着HTTP服务器和客户端在请求之外无法相互识别,一旦传输完成,他们就会忘记一切。这更像是对识别/记忆情况的定义,而不是网络。例如。客户端从服务器请求一个文件,服务器说“好的,你是谁,你想要什么?”,然后给客户端它想要的东西,网络连接被关闭,服务器和客户端忘记了对方。当相同的客户端向同一服务器请求其他文件时,服务器再次询问“你是谁?” 另一个例子是当你打电话给客户服务时。当您呼叫他们时,您的电话线已打开并连接,完成后您关闭电话。每次你打电话给他们(即创建连接)时,他们都会询问你的姓名以及你想要什么。 好吧,很酷,为什么 HTTP 使用 TCP 而不是 UDP?你能用一个例子来提供这样的解释吗? TCP 比 UDP 更可靠。 TCP 创建一个连接并确保您的数据包以您发送的相同顺序到达。另一方面,UDP 不创建连接,从不保证您的包裹会到达,并且可能会在途中丢失您的包裹,您甚至都不知道。但是,现在有使用 QUIC 协议的 HTTP/3,内部使用 UDP,(en.wikipedia.org/wiki/HTTP/3)。

以上是关于HTTP 协议无连接且默认使用 TCP,这有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议

浅谈HTTP协议

tcp和ip有啥区别?

长连接和短连接

http长连接和短连接

HTTP长连接与短连接