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

Posted

技术标签:

【中文标题】HTTP是无状态的,而TCP是有状态的?【英文标题】:HTTP is stateless while TCP is stateful? 【发布时间】:2021-11-07 02:37:02 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

谢谢,你能为初学者推荐一些涵盖这些主题的博客/教程/书籍吗? @Hanaffi:我不知道有什么专门涵盖这些主题的。随着时间的推移,我已经学会了所有这些。

以上是关于HTTP是无状态的,而TCP是有状态的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥说“HTTP 是无状态协议”?

为啥/如何 SOAP 是有状态的?

Cookie 机制

HTTP笔记_02_HTTP的网络分层模型

JavaWeb-Cookie和Session

JavaWeb-Cookie和Session