【问题标题】:HTTP status code for bad data错误数据的 HTTP 状态码
【发布时间】:2010-11-24 18:31:36
【问题描述】:

当客户端发布错误数据时,我应该返回什么 HTTP 状态代码(例如,预期为整数时的字符串)?

我一直在使用 400 Bad Request,但是当我阅读 HTTP 文档时,似乎更适用于 HTTP 协议错误。

我想使用状态码,以便 Flash 和 AJAX 客户端可以区分成功、错误数据和服务器错误,而无需解析响应。

【问题讨论】:

标签: http http-status-codes


【解决方案1】:

这正是 400 的用途。是的,它用于糟糕的 HTTP 协议使用,但并非专门用于此目的。

【讨论】:

  • 根据 OP 的问题,如果客户端按预期发出带有 integer 的 HTTP 请求怎么办。但是,假设该整数代表用户的id。如果服务器找不到该用户,是否也应返回400?
  • 在这种情况下,404 是最好的选择@KevinMeredith
【解决方案2】:

当客户端点击提交按钮时,我真的更倾向于在浏览器中捕获不良数据。

如果不是,那么我会返回 400,因为正如标准所说:

由于语法错误,服务器无法理解该请求。客户端不应该不加修改地重复请求。

【讨论】:

  • 你应该两者都做。不能保证您的 API 正在被浏览器使用。 :)
  • 永远不要相信 UI 会发出正确的请求。你绝对应该返回 400。
【解决方案3】:

如果语法错误,请使用“400 Bad Request”

由于语法错误,服务器无法理解该请求。客户端不应该不加修改地重复请求。

如果数据不正确(语法正确),请使用“422 Unprocessable Entity”

422(Unprocessable Entity)状态码意味着服务器理解请求实体的内容类型(因此 415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此 400 (错误请求)状态代码不合适)但无法处理包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会发生这种错误情况。

见https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

另请参阅https://softwareengineering.stackexchange.com/a/342896/158699 答案,正确的 400 和 422 代码。

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 2018-09-30
    • 2021-01-02
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多