尽管RFC 7231旨在提高清晰度,但显然已经对状态代码400产生了歧义。请注意SO answer and the comments。一个人说400现在包括逻辑,应用程序或验证错误,另一个人说400仍然仅用于语法或验证错误。
6.5.1。 400不良请求
400(错误请求)状态代码表示服务器不能或 由于被认为是某种东西,它不会处理请求 客户端错误(,例如,格式错误的请求语法,无效请求 消息框架或欺骗性请求路由)。
我想对此有一个更明确的答案。考虑POST或PUT尝试提供电子邮件地址的两种情况:
我想遵循RFC 7231.我对6.5.1的阅读告诉我,验证错误应该收到409(或422)响应。但其他人不同意,并声称现在应该是400。
是否有人有更多信息可以解决这种歧义?
答案 0 :(得分:1)
200是在这种情况下发送的正常状态代码。毕竟,当你没有输入有效的邮政编码时,HTML表格会得到4xx吗?
状态代码用于通用消费,而不是特定于应用程序的语义。当非特定的收件人(例如代理,缓存,HTTP库)在进入时可以做一些有趣的事情时,它们非常有用。
因此,当出现客户端问题(例如错误的请求 HTTP 语法)错误时,将使用400。它在7231中更通用,因为x00状态代码是其系列中最通用的,并且在未定义更具体的状态代码时应被视为回退。
你也可以使用400作为验证错误,从理论上讲,它有点帮助,因为HTTP库知道不重复那个请求 - 但是如果它是200,那肯定不值得过关注。 / p>