首页 > 解决方案 > HTTP是无状态的,而TCP是有状态的?

问题描述

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

标签: httpservertcprequestbackend

解决方案


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

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

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

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


推荐阅读