正确的HTTP状态代码到错误的input

什么是最佳的HTTP响应代码,当不报告200(一切正常),但input错误?

就像,你提交一些数据到服务器,它会回应你的数据是错误的

使用500看起来更像服务器问题
使用200与警告/错误响应文本是不好的(允许caching,一切都不好)
使用204并没有任何返回,也许是好的(但是很好的支持?)
如果请求的path(脚本)可用并且处于适当的位置,则使用404是错误的

以4(4xx)开始的代码是针对客户端错误的。 也许400(坏请求)可能适合这种情况? 定义在http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html说:;

“由于格式错误,服务器无法理解请求,客户端不应该不加修改地重复请求。”

我们在制作API的时候遇到了同样的问题。 我们正在寻找一个相当于InvalidArgumentException的HTTP状态码。 在阅读下面的源文章之后,我们结束了使用422 Unprocessable Entity ,其中指出:

422(不可处理的实体)状态码意味着服务器理解请求实体的内容types(因此415(不支持的媒体types)状态码是不合适的),并且请求实体的语法是正确的(因此400(错误的请求)状态码不合适),但无法处理包含的说明。 例如,如果XML请求主体包含格式正确(即,语法正确),但语义错误的XML指令,则可能会出现此错误情况。

来源: https : //www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

除了RFC规范,你也可以看到这个在行动。 查看twitter和facebook的回复。

https://dev.twitter.com/docs/error-codes-responses

http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.html

417表示HTTP_EXPECTATION_FAILED

404 – 未find – 可用于请求的URI无效或请求的资源(如用户)不存在。