提问者:小点点

服务器发送了FIN,但在客户端保持活动状态后没有接受任何数据,导致503错误


我已经观察到这在wireshark数据包捕获服务器发送FIN,确认字符.客户端发送post请求在同一时间.服务器发送保活检查如果客户端是活着或没有.客户端也确认并重新传输失败的数据包.服务器不发送任何重传包.在结束服务器发送RST单.这是导致503错误。

我需要帮助了解为什么客户端即使在服务器的FIN数据包之后也会发送POST请求?

让我们假设连接在FIN之后在服务器端仍然存在,为什么它不响应客户端的POST请求?

为什么服务器在客户端已经发送POST请求并等待服务器响应时发送Keep-Alive数据包?


共1个答案

匿名用户

我需要帮助了解为什么客户端即使在服务器的FIN数据包之后也会发送POST请求?

我会说POST与FIN同时发生,即客户端发送POST是因为其TCP堆栈尚未处理来自服务器的FIN。请注意,数据包捕获是在系统处理数据之前完成的。

为什么服务器在客户端已经发送POST请求并等待服务器响应时发送Keep-Alive数据包?

保持活动中的确认字符号指向POST之前的位置,即服务器TCP堆栈尚未处理POST。

在结束服务器正在发送RST单。这导致503错误。

那是服务器处理POST的时候。由于数据是在连接关闭(发送部分)后收到的,因此它将发送一个RST。

这是正确的行为,如果这导致503,我认为客户端是错误的。使用持久HTTP连接,服务器可能会在完成响应后和收到下一个请求之前随时关闭,客户端必须通过使用新连接重试请求来处理这种情况。