虽然RFC 7231是为了清晰起见,但它显然给状态码400带来了模糊性。注意这个SO answer and the comments。一个人说400现在包括逻辑、应用程序或验证错误,另一个人说400仍然只用于语法或验证错误。
6.5.1条。400错误请求
400(错误请求)状态代码指示服务器不能或
不会处理请求,原因是
客户端错误(例如,格式错误的请求语法、无效的请求
消息帧或欺骗请求路由)。
我想得到一个更确切的答案。考虑两种情况:post或put试图提供电子邮件地址:
在请求中找到的电子邮件验证失败(例如,它包含“hello g mail.com”)。回复400。
在请求中找到的电子邮件验证失败(例如,另一个用户已在使用该地址)。一个???已发送答复。
我想遵循RFC 7231。我对6.5.1的阅读告诉我,验证错误应该会收到409(或422)响应。但也有人不同意,并声称现在应该是400。
有没有人有更多的信息可以解决这个模棱两可的问题?
最佳答案
在这种情况下,200是一个很好的状态码。毕竟,当你没有输入有效的邮政编码时,html表单会得到4xx吗?
状态代码用于一般消费,而不是特定于应用程序的语义。当一个非特定的接收者(例如,代理、缓存、http库)可以做一些有趣的事情时,它们很有用。
因此,当有错误源于客户端问题(例如错误的请求http语法)时,将使用400。它在7231中变得更通用,因为x00状态代码是它们系列中最通用的,当没有定义更具体的状态代码时,应该考虑回退。
对于验证错误,也可以使用400,理论上说,这会稍微有帮助,因为http库知道不要重复该请求——但如果是200,肯定不值得太多关注。