2017-09-26 98 views
1

我在这里只谈论一个案例。HTTP请求可能中途失败吗?

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

我对此只有一个问题。

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

正如我想要同步客户端/服务器之间的状态,并希望100%的准确率,不管网络多么可怜,在回答这个问题,可以极大地影响客户的“重试失败的战略。

任何意见表示赞赏。

+0

不会有响应代码。 –

+0

@CássioMazzochiMolin很高兴知道,谢谢。所以这种情况实际上可能不是吗? – toyknight

回答

1

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

HTTP请求和响应通常在TCP数据包中进行。如果携带HTTP响应的TCP数据包没有到达预期的时间窗口,请求将被重新发送。该请求只会在超时错误发生并且连接被认为中断或死亡之前重新传输一定次数。 (可以在客户端和服务器端都配置TCP超时前的尝试次数。)

+0

感谢您的详细解答。我想我需要重新考虑我的网络代码。 – toyknight

0

这种情况甚至可能吗?

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

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

这将是一个超时。如果我们回到我们的有线电视的例子,客户正在等待一个永远不会到来的回应。希望它最终会放弃。它可能会给你一个“超时”或“网络错误”的特定错误代码;这可能会给你一个特定的错误代码。它可能会将其作为一些内部5xx状态码进行包装;它可能会在代码中引发异常;等等。