http - HTTP是无状态的,而TCP是有状态的?
问题描述
我想知道 HTTP 如何是无状态的,而它是基于有状态的 TCP 构建的?我仍然是初学者后端工程师,我对这个主题没有深入的了解。我试图寻找解释,但我不确定以前是否有人问过这个问题。
解决方案
有传输层(TCP)状态和应用层(HTTP)状态。
当谈论 TCP 是有状态的时,人们正在谈论传输层状态。TCP 是有状态的,因为需要由当前序列号等组成的传输层状态来提供 TCP 的可靠性保证,即数据包的排序、重复的删除、确认和重传。因此,需要跨越多个“单元”(数据包)的状态。
在 HTTP 中,这个单元是 HTTP 消息,即来自客户端的 HTTP 请求和来自服务器的 HTTP 响应。当谈论 HTTP 是无状态的时,这意味着在 HTTP 协议中不需要跨越多个此类消息的状态:响应严格遵循请求,并且没有涵盖多个请求或响应的状态 - 所有请求都相互独立于HTTP的观点。
在 Web 应用程序本身中,尽管通常需要一些状态,例如用户会话。这些状态是在 HTTP 之上实现的,通常在请求之间共享 cookie。然后,这些状态独立于特定的 HTTP 请求,也独立于底层的 TCP 连接。
推荐阅读
- javascript - 当用户选择“在新选项卡中打开”/“在新窗口中打开”而不是使用 html/javascript 点击时如何到达所需的页面
- c# - 服务错误1053:服务没有及时响应启动或控制请求
- authentication - 验证由 .net 核心微服务创建的 JWT
- python - 我在这方面做错了什么?
- php - 如何检查给定数组中是否存在特定值?
- reactjs - 无法解析锚标记
- php - 如何防止 PHP HTML type="hidden" 中断?
- java - Gradle Junit 5 - 使用 jar 进行测试
- c - 由于警告 C6031(“忽略返回值:'scanf'),Visual Studios 不会编译代码
- python - if 表达式来查找文本是否在 DictReader 键的字段中