我已经观察到这在wireshark数据包捕获服务器发送FIN,确认字符.客户端发送post请求在同一时间.服务器发送保活检查如果客户端是活着或没有.客户端也确认并重新传输失败的数据包.服务器不发送任何重传包.在结束服务器发送RST单.这是导致503错误。
我需要帮助了解为什么客户端即使在服务器的FIN数据包之后也会发送POST请求?
让我们假设连接在FIN之后在服务器端仍然存在,为什么它不响应客户端的POST请求?
为什么服务器在客户端已经发送POST请求并等待服务器响应时发送Keep-Alive数据包?
我需要帮助了解为什么客户端即使在服务器的FIN数据包之后也会发送POST请求?
我会说POST与FIN同时发生,即客户端发送POST是因为其TCP堆栈尚未处理来自服务器的FIN。请注意,数据包捕获是在系统处理数据之前完成的。
为什么服务器在客户端已经发送POST请求并等待服务器响应时发送Keep-Alive数据包?
保持活动中的确认字符号指向POST之前的位置,即服务器TCP堆栈尚未处理POST。
在结束服务器正在发送RST单。这导致503错误。
那是服务器处理POST的时候。由于数据是在连接关闭(发送部分)后收到的,因此它将发送一个RST。
这是正确的行为,如果这导致503,我认为客户端是错误的。使用持久HTTP连接,服务器可能会在完成响应后和收到下一个请求之前随时关闭,客户端必须通过使用新连接重试请求来处理这种情况。