42

What HTTP status code should I return when a client posts bad data (e.g. a string when integer was expected)?

I've been using 400 Bad Request, but as I read over the HTTP docs that seems more applicable to HTTP protocol errors.

I'd like to use a status code so that Flash and AJAX clients can distinguish between success, bad data, and server error without having to parse a response.

4

3 回答 3

52

这正是 400 的用途。是的,它用于糟糕的 HTTP 协议使用,但并非专门用于此目的。

于 2009-09-01T20:43:19.267 回答
6

当客户端点击提交按钮时,我真的更倾向于在浏览器中捕获坏数据。

如果不是,那么我会返回 400,因为正如标准所说:

由于语法错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。

于 2009-09-01T20:44:07.003 回答
6

如果语法错误,请使用“400 Bad Request”

由于语法错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。

如果数据错误(和正确的语法),请使用“422 Unprocessable Entity”

422(Unprocessable Entity)状态码意味着服务器理解请求实体的内容类型(因此 415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此是 400(Bad Request) ) 状态码不合适)但无法处理包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会出现这种错误情况。

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

另请参阅https://softwareengineering.stackexchange.com/a/342896/158699答案,其中包含正确的 400 和 422 代码。

于 2020-04-10T12:47:17.013 回答