HTTP状态400验证与验证

时间:2015-07-09 16:22:54

标签: rest http http-status-codes

尽管RFC 7231旨在提高清晰度,但显然已经对状态代码400产生了歧义。请注意SO answer and the comments。一个人说400现在包括逻辑,应用程序或验证错误,另一个人说400仍然仅用于语法或验证错误。

  

6.5.1。 400不良请求
  400(错误请求)状态代码表示服务器不能或   由于被认为是某种东西,它不会处理请求   客户端错误(,例如,格式错误的请求语法,无效请求   消息框架或欺骗性请求路由)。

我想对此有一个更明确的答案。考虑POST或PUT尝试提供电子邮件地址的两种情况:

  • 请求中找到的电子邮件验证(例如,它包含" hello#gmail.com")。 发送400回复。
  • 请求中找到的电子邮件验证(例如,其他用户已在使用该地址)。 A ???回复已发送。

我想遵循RFC 7231.我对6.5.1的阅读告诉我,验证错误应该收到409(或422)响应。但其他人不同意,并声称现在应该是400。

是否有人有更多信息可以解决这种歧义?

1 个答案:

答案 0 :(得分:1)

200是在这种情况下发送的正常状态代码。毕竟,当你没有输入有效的邮政编码时,HTML表格会得到4xx吗?

状态代码用于通用消费,而不是特定于应用程序的语义。当非特定的收件人(例如代理,缓存,HTTP库)在进入时可以做一些有趣的事情时,它们非常有用。

因此,当出现客户端问题(例如错误的请求 HTTP 语法)错误时,将使用400。它在7231中更通用,因为x00状态代码是其系列中最通用的,并且在未定义更具体的状态代码时应被视为回退。

你也可以使用400作为验证错误,从理论上讲,它有点帮助,因为HTTP库知道不重复那个请求 - 但是如果它是200,那肯定不值得过关注。 / p>