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

时间:2015-06-17 06:45:15

标签: javascript http

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

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

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

哪个Http错误/状态代码是合适的? 请求查询(使用GET)或某些更新(使用POST)是否重要?

3 个答案:

答案 0 :(得分:3)

您描述的两种方案都是服务器错误。无论是DB操作失败还是服务器端代码都没有处理错误(未处理的错误)。因此,对于前端角度,发生了服务器错误(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状态代码。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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