【问题标题】:What HTTP error code to return for name already taken?为已经使用的名称返回什么 HTTP 错误代码?
【发布时间】:2026-02-16 02:35:01
【问题描述】:

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

【问题讨论】:

标签: http error-code


【解决方案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 $.ajaxsuccess 处理程序应该可以帮助您,只需检查 API 中的示例。
  • 正如我在下面评论的,200 代表成功。完成请求的错误需要错误状态代码。我希望 Ryan 在请求失败时没有竭尽全力返回 200 美元 - 这是一个坏主意。
最近更新 更多