82

我正在尝试创建一个具有 2 个依赖项的服务。其中一个依赖项是内部管理的,而第二个依赖项需要对第三方 API 进行外部 http 出站调用。该序列需要更新资源,然后执行 http 出站调用。

所以我的问题是,如果第二步失败,返回的正确 http 状态码是什么?

响应应该是 424 还是 500,并带有解释遇到错误的消息正文?

  • 424:方法失败 - 表示该方法未在其范围内的特定资源上执行,因为该方法的某些部分执行失败导致整个方法中止。
  • 500内部服务器错误。
4

3 回答 3

81

您询问的故障是在服务本身内部发生的故障,因此 5xx 状态代码范围是正确的选择。503 Service Unavailable 看起来非常适合您描述的情况。

5xx 代码用于告诉客户端即使请求很好,但服务器在完成请求时遇到了某种问题。另一方面,4xx 代码用于告诉客户端它做错了什么(并且服务器很好,谢谢)。HTTP 1.1 规范的第 10.4 和 10.5 节解释了 4xx 和 5xx 代码的不同用途。

状态码 424 是在WebDAV 标准中定义的,适用于客户端需要更改其正在执行的操作的情况——服务器在这里没有遇到任何问题。

于 2013-09-10T05:33:52.690 回答
46

由于第二个操作是外部服务调用,您应该根据情况选择502或504。

引自:http ://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3

10.5.3 502 错误网关

服务器在充当网关或代理时,在尝试满足请求时从它访问的上游服务器接收到无效响应。

10.5.4 503 服务不可用

由于服务器临时过载或维护,服务器当前无法处理请求。这意味着这是一种暂时的情况,经过一段时间的延迟会得到缓解。如果已知,延迟的长度可以在 Retry-After 标头中指示。如果没有给出 Retry-After,客户端应该像处理 500 响应一样处理响应。

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.

10.5.5 504 网关超时

服务器在充当网关或代理时,没有收到来自 URI(例如 HTTP、FTP、LDAP)指定的上游服务器或它在尝试完成时需要访问的其他辅助服务器(例如 DNS)的及时响应请求。

  Note: Note to implementors: some deployed proxies are known to
  return 400 or 500 when DNS lookups time out.
于 2015-12-29T13:21:10.930 回答
16

如果问题是服务器期望缓解的问题(例如,如果它从上游服务器获得 503),则 503 Service Unavailable 是合适的。502 Bad Gateway 应该用于来自上游服务器的未知错误,您不知道如何响应。

于 2015-10-14T15:16:55.727 回答