当请求时间过长时使用哪个 HTTP 响应代码?

2023-11-29

我正在构建一个 API,可以对我们存储的非常大的数据库进行分析。有些请求需要很长时间才能处理。我们希望主动中止耗时超过 10 分钟的请求,但在我们尝试之前,我们不知道请求是否会花费那么长时间。大多数时候,这并不是因为服务器瞬时过载。这是因为用户发出的请求涉及大量数据,以至于我们根本无法足够快地处理它。

我已经搜遍了标准 HTTP 响应代码列表但我找不到一个明显适合的:

  • 409 Conflict- 或许?用户可以更改他们的请求以涉及较小的数据集。但我们觉得这更多是服务器问题,而不是客户端问题。

  • 422 Unprocessable Entity- 或许?我们将其用于其他验证错误,例如错误的日期格式或数据集名称。但在这种情况下,这并不是真正的客户端错误。

  • Other 400-级别代码 - 这不是一个错误的请求或身份验证问题。我们认为我们should满足请求,但我们不能。

  • 500 Internal Server Error- 也许是这个?但感觉太一般了。这就是错误和意外问题带来的原因。

  • 501 Not Implemented- 或许?我们还没有实现对涉及大量数据的请求的支持。但 RFC 似乎暗示这是在未实现请求方法时使用的。但这里的问题不是方法。

  • 503 Service Unavailable- 但问题通常不是暂时的。重复请求很可能会因同样的问题而失败。

  • 504 Gateway Timeout- 从技术上讲,这可能是有效的,因为我们有一个面向公众的 API 服务,它将这些请求代理到内部服务。但我们不一定希望向客户公开此实现细节。

哪个最合适/最不坏?或者还有其他我应该考虑的吗?


如果您想指示这是服务器端错误并且用户可以重试请求 - 使用5xx

但看起来在你的情况下你想对用户说your query is too big, change it before retrying,所以你应该使用4xx

所以,我会选择400 Bad Request.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当请求时间过长时使用哪个 HTTP 响应代码? 的相关文章

随机推荐