gpt4 book ai didi

http - POST 数据是否应该在超时条件下重试?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:02 25 4
gpt4 key购买 nike

当发布数据时——无论是使用 AJAX 还是从移动设备或你有什么——通常会有一个“重试”条件,所以如果发生超时之类的事情,数据会再次发布。

这真的是个好主意吗?

POST 数据是幂等的,所以如果你

  1. 向服务器发送 POST,
  2. 服务器收到请求,
  3. 需要时间来执行和
  4. 然后将数据发回

如果超时在 3 之后的某个时间发生,那么下一次重试将发送本应是幂等的数据。

那么问题是应该为 POST 数据设置重试(当从客户端调用时),还是应该将服务器设计为始终适本地处理 POST 数据(使用 token 等),或者我是否遗漏了一些东西?

根据问题

更新 - 这是针对移动应用程序的。碰巧的是,在测试过程中发现超时时间太短,应用程序会重试。与此同时,后端服务器实际上已经接受并处理了初始请求,并且在新的(否则相同的)重新请求进来时变得非常沮丧。

最佳答案

nonce是对此的(部分)解决方案。服务器生成一个随机数并将其提供给客户端。客户端发送包含 nonce 的 POST,服务器检查 nonce 是否有效且未使用,如果是,则对 POST 进行操作并使 nonce 无效,如果不是,它报告 nonce 已被使用并丢弃数据。对于避免用户单击提交按钮两次的“双重发布”问题也非常有用。

但是,它正在将问题从客户端转移到服务器上的另一个客户端。如果您在操作之前使 nonce 无效,操作可能仍会失败/挂起,如果您在之后使它无效,则 nonce 在处理期间对请求仍然有效。因此,服务器上的一种可能情况是在接收时。

  1. 锁定随机数
  2. 采取行动
  3. 任何处理错误阻止操作完成、回滚、释放 nonce 锁。
  4. 如果没有错误,使 nonce 无效/删除。

Semaphores服务器端对此最有帮助,大多数后端语言都有用于这些的库。

因此,实现所有这些:

  1. 重试是安全的,如果操作已经执行,则不会再次执行。
  2. 可以将随机数已被使用的回复理解为对原始 POST 已被执行的确认。
  3. 如果您需要一个操作的结果,其中第二个请求显示第一个请求已通过,则服务器端需要一个短期缓存。
  4. 由您为后续尝试设置合理的限制(如果第二次失败怎么办?或第三次?)。

关于http - POST 数据是否应该在超时条件下重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880637/

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