Apache HttpClient 会在所有 HTTP 5XX 错误上执行抛出 IOException 吗?

Will Apache HttpClient execute throw an IOException on ALL HTTP 5XX errors?

execute(HttpHost target, HttpRequest request) 方法的 Apache HttpClient docs 说:

IOException - in case of a problem or the connection was aborted

如果我捕捉到 IOException,它会捕捉到 ALL Server 5xx Errors 吗?

try {
  response = client.execute(httpHost, request);
} catch (IOException e) {
  // throw custom Exception
} finally {
  // close response and client
}

我问的原因是,在这个逻辑之后的其他地方,我们正在做如下的事情:

if (response.getStatusLine().getStatusCode() >= 500) {
  // Could we ever reach this point after the code above?
}

不,HttpClient 不会为 any 500/5xx 响应 抛出 IOException。

IOException 仅在 low-level 连接失败(例如主机名无效,没有服务器侦听)或 TCP 管道异常中断(例如互联网连接)时发生丢失了)。

'HTTP 500' 是服务器响应 - 有效 服务器响应 - 指示错误情况。它有一个状态代码 headers 和 body,这是 200 响应的所有内容。

文档说 return 值是“对请求的 [最终] 响应 ”;只要服务器能够 return a 有效响应,无论状态代码如何,都是如此。