HTTP状态码400:验证与确认的区别

5
尽管RFC 7231旨在提供明确性,但显然在状态码400方面带来了歧义。请注意SO答案和评论。一个人表示400现在包括逻辑、应用或验证错误,另一个人表示400仍然只用于语法或验证错误。

6.5.1. 400 Bad Request
400(错误请求)状态码表示服务器因为某些被视为客户端错误的原因而无法或不会处理请求(例如,请求语法错误、无效的请求消息框架或欺骗性请求路由)。

我希望获得更明确的答案。考虑两种情况,其中POST或PUT试图提供电子邮件地址:
  • 请求中发现的电子邮件未通过验证(例如,它包含"hello#gmail.com")。 发送400回复。
  • 请求中发现的电子邮件未通过确认(例如,另一个用户已经使用该地址)。 发送???回复。

我想遵循RFC 7231。 我对6.5.1的阅读告诉我,确认错误应该收到409(或422)响应。 但其他人持不同意见,认为现在应该是400。

有没有人有更多信息可以解决这种模糊性?


2
有数百个“在<任意情况下使用哪个状态码>”的问题。400是一个笼统的陈述,如果你能找到更适合情境的状态码,选择更具体的那一个——如果你想的话。关键是要保持一致。 - CodeCaster
答案是使用对你最好的工具。 - sanpaco
1个回答

2

在这种情况下,发送200状态码是合适的。毕竟,当您没有输入有效的邮政编码时,HTML表单会收到4xx吗?

状态码是用于通用使用的,而不是应用程序特定的语义。当非特定接收者(例如代理、缓存、HTTP库)接收到请求时,它们非常有用。

因此,在客户端存在问题(例如错误的请求HTTP语法)导致的错误时,应使用400。在7231中将其更加通用,因为x00状态码是其系列中最通用的,并且应被视为更具体状态码未定义时的后备。

您也可以将400用于验证错误,从理论上讲,这会略微有所帮助,因为HTTP库知道不要重复该请求,但如果是200,则不必过于担心。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接