哪个 Http 错误/状态代码是合适的

Which Http error/status code is the appropriate?

本文关键字:代码 状态 Http 错误 哪个      更新时间:2023-09-26

我已经仔细阅读了所有HTTP错误/状态代码,仍然不清楚在以下情况下返回哪个是合适的:

  • 该请求是 Ajax 请求,因此错误情况的处理取决于客户端 javascript 代码,最好它会给出通知。
  • 在服务器端
  • 发生意外错误(例如数据库操作失败),但是在服务器端处理异常,并在其中创建适当的错误消息(字符串)。

"意外错误"意味着HTTP 500,但是我想区分真实的服务器内部(和未处理的)错误和我上面描述的已处理用例。

哪个 Http 错误/状态代码合适?请求查询(使用 GET)还是某些更新(使用 POST)有关系吗?

您描述的两种情况都是服务器错误。无论是数据库操作失败还是服务器端代码未处理错误(未处理的错误)。因此,从前端的角度来看,发生了服务器错误(500 错误状态)。

现在,区分自定义应用程序错误和未处理的错误归结为您使用的是哪种服务器端技术。您可以使用一些只有已处理的应用程序错误才会具有的信息来修饰(添加属性)错误对象。因此,在前端,如果该属性存在,则为已知服务器错误。

//500 error - unknown model
{ status: 500, exception: "my unknown error." }
//500 error - known model
{ status: 500, exception: "DB script has failed.", errorCode: 001 }

调用是 GET 还是 POST 并不重要。这两种方法都可以返回相同的 http 状态代码。

相应的响应是 5xx 服务器错误。根据错误的类型,您可以选择使用"503 服务不可用"或"501 未实现",但在更通用的情况下选择"500 内部服务器错误"(GET 或 POST 无关紧要)。

您可以选择提供自定义响应正文,以区分已处理的错误消息和未处理的错误消息。

有一个可用状态代码的列表。通常,如果请求有效,您将收到状态代码 200。如果找不到资源,您将获得 404。所有服务器端错误都将导致 500。如果您打算区分服务器端错误,则必须手动捕获它们并返回具有不同状态代码的响应。注意:状态代码 500 是最糟糕的。例如,不应使用它在验证失败时返回错误消息。在这种情况下,请使用不同的状态代码。