对于损坏的有效负载(校验和失败),最合适的HTTP错误代码是什么?

Hon*_*ule 6 rest http-status-codes flow-js

我正在编写一个RESTful API,其中包含一些端点,客户端可以将这些端点PUT或POST分块文件(使用flow.js),包括元数据中的有效负载摘要.服务器还会计算摘要,如果摘要不匹配,则会抛出错误,在这种情况下,客户端应尝试重试相同的请求而不做任何更改(至少在达到某个重试限制之前).

根据定义,所有标准代码似乎都不合适.什么是最好的代码?是否有任何符合惯例?

注意:出于与此库集成的目的,响应不能是404,415,500或501,因为它们将取消较大的操作而不是重试此部分.

我也不能使用409,因为它被用于识别上传同一文件的多个副本的尝试,我相信这更好地使用409.

小智 6

我认为当用户的相同数据出现错误(例如损坏的数据)时更合适的状态代码是:

400 Bad Request
Run Code Online (Sandbox Code Playgroud)

对我来说,损坏的数据意味着数据传输引起的语法错误,语义上正确但语法上错误。

422 无法处理的实体也可能适用。 https://www.rfc-editor.org/rfc/rfc4918#section-11.2


Hon*_*ule 2

我无法接受 Matthew 的答案,因为它仍然建议我不使用的值之一 - 而且我还相信 5xx 错误在错误发生在客户端或传输层时不太合适。

虽然仍在寻找更好的选择,但我现在将建议(并使用)非标准 4xx 错误,特别是

419 校验和失败

选择该特定值是因为它接近处理性质相似的错误的代码,并且与 409 相似,这可能是最接近的关系。

几天后将选出一个答案,为社区就最佳实践方法达成共识提供机会。