HTTP 是无状态的,而 TCP 是有状态的?

HTTP is stateless while TCP is stateful?

我想知道 HTTP 是如何建立在有状态的 TCP 之上的而无状态的? 我仍然是初学者后端工程师,我对这个主题没有深入的了解。 我试图搜索解释,但我不确定以前是否有人问过这个问题。

有传输层 (TCP) 状态和应用层 (HTTP) 状态。

当谈论 TCP 是有状态的时,就是在谈论传输层状态。 TCP 是有状态的,因为需要由当前序列号等组成的传输层状态来提供 TCP 的可靠性保证,即数据包的排序、重复项的删除、确认和重传。因此需要一个跨越多个“单元”(数据包)的状态。

在HTTP中这个单位是HTTP消息,即来自客户端的HTTP请求和来自服务器的HTTP响应。当谈论 HTTP 是无状态的时,这意味着 HTTP 协议内部没有跨越多个此类消息所需的状态:响应严格遵循请求并且没有状态涵盖多个请求或响应 - 所有请求彼此独立于HTTP 的视角。

在 Web 应用程序本身中,通常需要一些状态,例如用户会话。这些状态是在 HTTP 之上实现的,通常在请求之间共享 cookie。然后,这些状态独立于特定的 HTTP 请求,也独立于底层的 TCP 连接。