如果一个网站依赖于上游数据库或其他抽象服务或存储(基本上是人类已知的大多数网站),那么当上游请求因超时而终止时,我应该返回 503 还是 504?
503服务不可用
服务器当前不可用(因为过载或停机维护)。一般来说,这是一种临时状态。有时,这在测试服务器上也可能是永久性的。
504网关超时
服务器充当网关或代理,没有收到上游服务器的及时响应。
504 感觉更适合代理服务器、缓存或其他 Web 基础设施,但 503 也不正确,因为服务很好,当前请求恰好终止,也许搜索可能过于广泛或其他什么。
那么根据 HTTP 的说法,哪一个是“正确的”呢?
卢克
如果这是一个临时情况,只需等待即可解决,503 听起来很合适。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html指出:“这意味着这是一种临时情况,延迟一段时间后会得到缓解。”
500听起来也合适。RFC 指出:“服务器遇到了意外情况,导致其无法满足请求。 ”数据库无响应是一种异常/意外情况。
IMO,归根结底是这样的:您是否提供了一个错误代码来帮助调用者(即 HTTP 客户端)响应这种情况?在这种情况下,客户端除了稍后重试之外别无他法。鉴于此,我会保持简单并返回 500。我认为客户更有可能关心该网站是否可用,而不太可能关心具体原因。另外,更少的响应代码使得对客户端进行编码变得更容易。再说一遍,这只是我的意见。