4

如果一个网站依赖于上游数据库或其他抽象服务或存储——基本上是人类已知的大多数网站——那么当上游请求因超时而终止时,我应该返回 503 还是 504?

503服务不可用

服务器当前不可用(因为它超载或停机维护)。通常,这是一种临时状态。有时,这在测试服务器上也可能是永久性的。

504网关超时

服务器充当网关或代理,没有收到来自上游服务器的及时响应。

504 感觉更像是为代理服务器、缓存或其他 Web 基础设施设计的,但 503 也不正确,因为服务很好,当前请求恰好死了,也许搜索可能是广泛的或其他什么。

那么根据 HTTP 哪个是“正确的”?

卢克

4

1 回答 1

4

如果这是一个临时情况,只需等待即可解决,503 听起来很合适。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html声明:“这意味着这是一种暂时的情况,经过一段时间的延迟会得到缓解。”

500 听起来也很合适。RFC 声明:“服务器遇到了一个意外情况,导致它无法满足请求。 ”无响应的数据库是一种异常/意外情况。

IMO,归根结底是:您是否提供了一个错误代码来帮助调用者(即 HTTP 客户端)响应这种情况?在这种情况下,除了稍后再试之外,客户实际上无能为力。鉴于此,我会保持简单并返回 500。我认为客户更有可能关心网站是否可用,而不太可能关心具体原因。加上更少的响应代码,可以更轻松地编写客户端代码。这只是我的意见。

于 2013-10-31T17:12:53.577 回答