【发布时间】:2010-11-24 18:31:36
【问题描述】:
当客户端发布错误数据时,我应该返回什么 HTTP 状态代码(例如,预期为整数时的字符串)?
我一直在使用 400 Bad Request,但是当我阅读 HTTP 文档时,似乎更适用于 HTTP 协议错误。
我想使用状态码,以便 Flash 和 AJAX 客户端可以区分成功、错误数据和服务器错误,而无需解析响应。
【问题讨论】:
当客户端发布错误数据时,我应该返回什么 HTTP 状态代码(例如,预期为整数时的字符串)?
我一直在使用 400 Bad Request,但是当我阅读 HTTP 文档时,似乎更适用于 HTTP 协议错误。
我想使用状态码,以便 Flash 和 AJAX 客户端可以区分成功、错误数据和服务器错误,而无需解析响应。
【问题讨论】:
这正是 400 的用途。是的,它用于糟糕的 HTTP 协议使用,但并非专门用于此目的。
【讨论】:
integer 的 HTTP 请求怎么办。但是,假设该整数代表用户的id。如果服务器找不到该用户,是否也应返回400?
当客户端点击提交按钮时,我真的更倾向于在浏览器中捕获不良数据。
如果不是,那么我会返回 400,因为正如标准所说:
由于语法错误,服务器无法理解该请求。客户端不应该不加修改地重复请求。
【讨论】:
如果语法错误,请使用“400 Bad Request”
由于语法错误,服务器无法理解该请求。客户端不应该不加修改地重复请求。
如果数据不正确(语法正确),请使用“422 Unprocessable Entity”
422(Unprocessable Entity)状态码意味着服务器理解请求实体的内容类型(因此 415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此 400 (错误请求)状态代码不合适)但无法处理包含的指令。例如,如果 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 代码。
【讨论】: