HTTP请求可以中途失败吗?

时间:2017-09-26 16:21:34

标签: http

我在这里只讨论一个案例。

客户端向服务器发送了请求 - >服务器收到它并返回响应 - >不幸的是,回应率下降了。

我只有一个问题。

  • 这种情况甚至可能吗?如果有可能那么响应代码应该是什么,或者客户端只是将其视为读取超时?

由于我想在客户端/服务器之间同步状态并且无论网络多么糟糕,都希望100%准确,因此这个问题的答案会极大地影响客户的“失败重试”策略。

任何评论都表示赞赏。

2 个答案:

答案 0 :(得分:1)

是的,您所描述的情况是可能的并且经常发生。它被称为" packet loss"。由于数据包丢失,响应永远不会到达客户端,因此无法接收响应代码。 Web浏览器将显示为"错误连接到服务器"或类似的。

HTTP请求和响应通常在TCP数据包中携带。如果携带HTTP响应的TCP数据包未到达预期时间窗口,则重新发送该请求。只有在发生超时错误并且连接被视为已损坏或无效时,才会重新传输该请求一定次数。 (可以在客户端和服务器端配置TCP超时之前的尝试次数。)

答案 1 :(得分:0)

  

这种情况甚至可能吗?

是。如果您在客户端和服务器之间画出物理电缆,很容易理解为什么。如果我通过电缆向服务器发送请求,然后,在服务器有机会响应之前拔掉电缆,服务器将收到请求,但客户端永远不会听到"回应。

  

如果可能,那么响应代码应该是什么,或者客户端只是将其视为读取超时?

这将是暂停。如果我们回到我们的物理电缆示例,客户端正在等待永远不会响应的响应。希望它最终会放弃。

具体取决于您使用的工具或库如何包装,但它可能会为您提供特定的错误代码" timeout"或"网络错误&#34 ;;它可能将其包装为一些内部5xx状态代码;它可能会在您的代码中引发异常;等