gpt4 book ai didi

http - 是 HTTP 请求 'atomic'

转载 作者:可可西里 更新时间:2023-11-01 16:54:58 25 4
gpt4 key购买 nike

我了解 HTTP 请求将产生包含代码和可选正文的响应。

如果我们将请求的发起者称为“客户端”,将请求的接收者称为“服务器”。

那么顺序就是

  1. 客户端发送请求
  2. 服务器接收请求
  3. 服务器发送响应
  4. 客户端收到响应

服务器是否有可能完成第 3 步但第 4 步没有发生(由于连接断开、应用程序错误等)。

换句话说:服务器是否有可能“相信”客户端应该收到响应,但客户端出于某种原因没有收到?

最佳答案

网络本质上是不可靠的。如果对方已经确认消息,您只能确定消息已到达,但您永远不会知道它没有。

更糟糕的是,对于 HTTP,请求的唯一确认就是答案,而没有对答案的确认。这意味着:

  • 客户端如果得到响应就知道服务器已经处理了请求。如果没有,它不知道请求是否已处理
  • 服务器永远不知道客户端是否得到了答案

TCP 堆栈通常会在关闭套接字时确认答复,但该信息不会传播到应用程序层并且在那里没有用处,因为堆栈可以确认收到,然后应用程序可能不会处理该消息因为它崩溃(或电源故障或其他原因),并且从应用程序的角度来看,原因是在 TCP 堆栈中还是在它之上并不重要——消息未被处理的任何一种方式。

处理此问题的最简单方法是使用幂等操作。如果服务器再次收到相同的请求,它没有副作用并且响应是相同的。这样,如果客户端在等待响应时超时,只需再次发送请求,它最终(除非连接被断开,再也无法修复)将获得响应,请求将完成。

如果一切都失败了,你需要记录执行过的请求,并在服务器中剔除重复的请求。因为没有网络协议(protocol)可以为您做到这一点。它可以消除许多(如 TCP 所做的那样),但不是全部。

关于http - 是 HTTP 请求 'atomic',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com