【发布时间】:2017-05-30 06:28:41
【问题描述】:
我们有一个应用程序,它创建一个订单并通过 HTTP post 发送到服务器。
- 客户端将订单作为 HTTP 请求发送
- 服务器处理它
- 服务器发送响应
- 服务器对这个订单做一些进一步的操作
- 客户端接收响应并对其进行处理。
有人问我关于第 3 步的情况,响应不会到达客户端并在途中迷路。然后客户端将尝试重新发送相同的订单。这将引入重复订单问题。以及如何解决这个问题。
我想出了一个想法,客户端生成一个唯一的 ID 并发送到服务器,所以当客户端第二次发送它时,服务器可以知道这是一个重复的订单,并且只会返回之前的响应。
但我很快就记得 HTTP 是建立在 TCP 之上的,它应该有一个用于数据连接的三向握手功能。这意味着:
从客户端的角度来看,如果客户端没有收到服务器的任何响应,连接会一直保持到超时,然后抛出异常让客户端知道。
我的问题是:
从服务器的角度来看,它发送响应后,如何确定响应已到达客户端?
在传输层应该有一个三向握手连接终止,以确保只有在客户端收到消息后才会关闭连接,对吧?所以如果消息在途中丢失,服务器应该触发异常,对吗?
如果是这种情况,问题可以简单地通过确保服务器仅在步骤 3 中没有异常的情况下执行步骤 4 来解决?如果我上面的整个想法是错误的,还有其他解决方案吗?
谢谢
【问题讨论】:
标签: http tcp connection response