远程服务器发生故障时使用哪个HTTP状态代码?500还是502?

远程服务器发生故障时使用哪个HTTP状态代码?500还是502?,http,http-status-codes,Http,Http Status Codes,我有一个API,根据客户的POST请求: 解析客户端的请求 处理请求中的数据 向远程服务器发送请求 从远程服务器接收响应 对响应中的数据执行更多操作 将数据持久化到数据库中 向客户端发送响应 换言之,普通的web服务器的东西 如果远程服务器向我发送500(或任何其他错误),我应该向我的客户端发送500内部服务器错误还是502坏网关 从RFC 7231 6.6.3. 502 Bad Gateway The 502 (Bad Gateway) status code indicates t

我有一个API,根据客户的POST请求:

  • 解析客户端的请求
  • 处理请求中的数据
  • 向远程服务器发送请求
  • 从远程服务器接收响应
  • 对响应中的数据执行更多操作
  • 将数据持久化到数据库中
  • 向客户端发送响应
  • 换言之,普通的web服务器的东西

    如果远程服务器向我发送
    500
    (或任何其他错误),我应该向我的客户端发送
    500内部服务器错误
    还是
    502坏网关

    从RFC 7231

    6.6.3.  502 Bad Gateway
    
       The 502 (Bad Gateway) status code indicates that the server, while
       acting as a gateway or proxy, received an invalid response from an
       inbound server it accessed while attempting to fulfill the request.
    
    一方面,
    502坏网关
    看起来是为“哑”服务器设计的,这些服务器只将请求转发给远程服务器,并将其响应返回给客户端,而无需进行太多处理

    另一方面,无法访问远程服务器听起来不像是
    500内部服务器错误
    。。。更像是“远程服务器错误”

    我应该用哪一个<代码>500,
    502
    或其他?

    我会选择500

    这其实并不重要——它们都是5xx系列错误的一部分,意思是“我们搞砸了,而不是你”——因此,在返回的错误代码中,究竟出了什么问题并不是真正需要传达的。500是通用的,被很好地理解,其含义也很清楚,所以我只会使用它,而不会使事情过于复杂

    解决你的具体问题

    一方面,502坏网关看起来是为“哑”服务器设计的,这些服务器只将请求转发给远程服务器,并将其响应返回给客户端,而无需进行太多处理

    这当然是惯例,但我认为你的分析是合理正确的

    另一方面,无法访问远程服务器听起来不像是500内部服务器错误。。。更像是“远程服务器错误”


    我认为这仍然是一个内部服务器错误,只是一个由其他地方的远程服务器引起的内部服务器错误(这是一个您的用户可以说不需要知道的细节。)

    您是否希望客户端在500和502错误之间的实际行为有所不同?毕竟,两者基本上都意味着服务器直接或间接出现了问题。例如,我认为应用程序客户端不需要这样的粒度。@TimBiegeleisen,我想客户端在所有5xx错误上的行为都是一样的。我将使用下面的答案。我想500种已经包括502种了。如果你偏执/一丝不苟,你仍然可以在自己的服务器上记录502。然后,任何客户端500都可以很容易地追溯到由实际的502引起的。