【问题标题】:how does the HTTP protocol behind client/server communication works?客户端/服务器通信背后的 HTTP 协议如何工作?
【发布时间】:2026-01-16 17:55:02
【问题描述】:

HTTP 是客户端-服务器通信,客户端始终发起连接,服务器响应。

在使用 HTTP 1.1 的客户端服务器通信中,会发生以下步骤: 1. 客户端向服务器发送请求。 2. 服务器向客户端发送响应,带有响应消息和状态码。

我的问题是协议中如何处理数据传输?我知道 HTTP 是无状态的,而且它要么是全有,要么全无,但你如何证明这一点?服务端和客户端的握手情况如何?

例如:当服务器将响应发送回客户端时,如果发送了 50% 的数据,然后出现连接丢失,会发生什么情况……那么在这种情况下会发生什么情况?客户端会等待剩余 50% 的消息,还是会在服务器尝试再次发送 100% 的消息时开始新的传输? (同步通信中)

【问题讨论】:

  • 这就是此类请求超时的原因。如果在超时时间内没有给出响应,则假定连接丢失或错误。
  • 是的,我在超时时知道了,但是我们如何确认从服务器接收到客户端的 100% 消息?客户端是否会在协议中向服务器发回任何可以验证的内容?
  • (请注意,你问的是 HTTP,我想你是在关注 TCP 层发生的事情)
  • 是的,感谢您的纠正。很抱歉用我愚蠢的问题打扰你。当有 200, OK 时,这是否意味着服务器正在向客户端发送 200, OK 消息被发送到客户端,并且客户端也向服务器发送 200, OK?那是2路吗?

标签: http protocols


【解决方案1】:

HTTP 依赖于 TCP 连接,因此在您的示例中,如果 50% 的数据被正确发送但其他数据包(是的,您应该考虑数据包)丢失,数据将按照定义的规则再次发送在 TCP 协议中

【讨论】:

  • 所以假设重试未启用,那么我们将获得超时,这意味着数据丢失......如果 100% 数据发送到客户端会发生什么......然后在协议内部客户端如何通知服务器是否接收到全部数据?
  • 它没有,明确的。如果有数据被发送回客户端,客户端可以检查 content-length 标头以确认它已收到服务器期望它接收的所有内容。如果客户端想要更多/不同的信息,它将向服务器发出新的请求
  • 好的,我将总结我的理解,如果我说错了,请纠正我。当服务器向客户端发送响应时,无法确认服务器已向客户端发送了 100% 的数据,而客户端可以再次确认说是的,我得到了所有 100% 的数据?在 http 中,服务器无法验证客户端是否确实收到了响应,它只能“发送”。我说的对吗?
  • @user3384231 不,服务器可以验证这一点,这就是 TCP 层的用途。
  • @TimothyGroote 你能进一步解释一下吗?
最近更新 更多