Javascript 如何区分两种http错误情况:CORS阻塞与服务器关闭

Javascript 如何区分两种http错误情况:CORS阻塞与服务器关闭,javascript,http,error-handling,cors,Javascript,Http,Error Handling,Cors,这个问题是关于一个基础架构的,其中有两个后端和一个前端。因此后端#2配置了CORS 我正在对后端2执行一个$.ajax请求,我需要以编程方式区分这两种情况: { "readyState": 0, "status": 0, "statusText": "error" } 当服务器关闭时 当CORS阻塞发生时 今天,这两种情况下的错误完全相同: { "readyState": 0, "status": 0, "statusText": "error" } 如何以编程方式区

这个问题是关于一个基础架构的,其中有两个后端和一个前端。因此后端#2配置了CORS

我正在对后端2执行一个
$.ajax
请求,我需要以编程方式区分这两种情况:

{
  "readyState": 0,
  "status": 0,
  "statusText": "error"
}
  • 当服务器关闭时
  • 当CORS阻塞发生时
  • 今天,这两种情况下的错误完全相同:

    {
      "readyState": 0,
      "status": 0,
      "statusText": "error"
    }
    
    如何以编程方式区分这两种错误情况

    出现CORS问题时,浏览器
    控制台会显示一条关于CORS阻塞的特定消息,但需要在应用程序内显示单独的消息

    有关我的CORS错误的更多详细信息:

    Access to XMLHttpRequest at 'http://localhost:3310/foo' from origin 'http://bar.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    

    如果是cors错误,收到的错误代码应为401。控制台上应打印以下消息

    响应中不存在ACCESS-CONTROL-ALLOW-ORIGIN标头。
    如果是服务器停机或与服务器相关的任何问题,您应该会收到5xx错误代码。大概500。因此,您可以通过区分http状态代码来检查错误。

    以下是一个可能的答案:


    在服务器上创建运行状况检查路由。它应该可以从任何地方访问,以检测服务器是否启动。

    我能看到的唯一区别是错误恢复所需的时间。CORS几乎立即失效,但服务器停机需要一点时间。:)是的,我也可以覆盖“console.error”方法来检测一些消息,但这些消息非常糟糕。我希望有更可靠的东西。从设计上看,无法将这两种情况与前端JavaScript代码区分开来。(并且覆盖console.error将不允许您检测浏览器自己正在登录到控制台的消息,例如CORS错误消息。)谢谢sideshowbarker。您认为如何添加一个对所有来源开放的healthcheck路由,您认为它可靠吗?可靠的方法是使用服务器端后端代码发出请求并检查响应的状态代码。如果这就是你所说的添加healthcheck路由的意思,那么是的,我想这就是正确的方法。我可以问你客户端http请求框架是什么吗?jquery、axios都可以。每个框架的概念都是一样的(因为在我的例子中,飞行前选项返回204(我可以在网络选项卡中看到),但它在框架级别产生了一个错误,这两个错误是相同的:服务器关闭/cors pb。如果是飞行前请求,那么它将导致204,因为没有内容。您正在检查服务器是否启用了cors。因此,没有返回任何内容,但成功启用了cors。我没有完全收到您的消息,Ayan。您能帮我检查一下吗laborate?如何区分服务器故障和CORS问题。