为已经使用的名称返回啥 HTTP 错误代码?

Posted

技术标签:

【中文标题】为已经使用的名称返回啥 HTTP 错误代码?【英文标题】:What HTTP error code to return for name already taken?为已经使用的名称返回什么 HTTP 错误代码? 【发布时间】:2012-09-21 08:53:42 【问题描述】:

我正在执行 AJAX 调用来设置用户名。如果用户名已经被占用,我应该返回什么 HTTP 代码?

【问题讨论】:

Which HTTP response code for "This email is already registered"?的可能重复 【参考方案1】:

您可以使用 409 冲突。

表示由于当前状态冲突,无法处理请求。

【讨论】:

200 带有错误消息违反了所有不同 HTTP 错误状态代码的目的。 根据Hypertext Transfer Protocol (HTTP) Status Code Registry 2xx - 操作已成功接收、理解和接受 4xx - 请求包含错误语法或不能已完成,因此 200 不适合建议的答案【参考方案2】:

我会选择 422 Unprocessable Entity 。许多 Rails 开发人员将其用于所有验证错误。

是的,评估错误状态并使用 javascript 呈现错误消息是完全合适的。如果您对 API 使用相同的操作,这将特别有用。然后,您的 ajax 请求将访问您将向其他开发人员公开的相同 API。

【讨论】:

这是否适用于用户注册时密码太短,字符不正确。无效的电子邮件等?谢谢! 是的 - 这意味着浏览器发送的内容与系统的约束冲突。【参考方案3】:

这里没有规则,由你决定。但是,正如@rationalboss所说,由于HTTP请求成功,因此返回200消息是有意义的,该错误与请求无关。

400 错误表示请求本身在某些方面不正确,例如动词错误或缺少参数。

这里的问题是关于软件客户端和人类的解释,当没有 HTTP 错误时,最好远离错误代码。

【讨论】:

我不同意,但就像你说的,这是一个见仁见智的问题。对我来说,完成请求的错误需要一个错误代码。我不希望客户检查响应中的详细信息以知道有什么问题。如果我返回 OK,则表示它已经成功。完成请求的任何错误都应属于 400 类别,除非它是实际的服务器异常,在这种情况下它会出现 500,但绝不会出现 200。【参考方案4】:

名称没有 HTTP 代码。请参阅List of HTTP Status Codes。

如果您使用 AJAX 调用来设置用户名,为什么不在 html 中显示错误?这对用户更友好,因为您的访问者会知道实际错误的含义,而不是看到一些 4XX 代码。

【讨论】:

我打算用 jquery 捕获 4xx 代码并显示用户友好的错误消息。 您不仅可以捕获带有 http 状态码的东西。您可以改为捕获错误消息。检查jQuery API on $.ajax。 success 处理程序应该可以帮助您,只需检查 API 中的示例。 正如我在下面评论的,200 代表成功。完成请求的错误需要错误状态代码。我希望 Ryan 在请求失败时没有竭尽全力返回 200 美元 - 这是一个坏主意。

以上是关于为已经使用的名称返回啥 HTTP 错误代码?的主要内容,如果未能解决你的问题,请参考以下文章

在带有 HTTP 状态代码 405 的 REST API 中返回啥错误消息?

对于使用错误凭据执行的登录请求,REST API 应返回啥状态代码?

错误代码500是啥意思

是啥导致“HTTP 方法名称必须是令牌”错误?

ABRecordCopyValue 可以返回啥? (解决错误的访问)

网页提示错误类型:400啥意思