Angular HTTP:状态 -1 和 CORS

Posted

技术标签:

【中文标题】Angular HTTP:状态 -1 和 CORS【英文标题】:Angular HTTP: Status -1 and CORS 【发布时间】:2016-05-26 21:55:17 【问题描述】:

在我们的 Angular 应用程序中,有时我们会收到返回给我们的 http 状态 -1。状态 -1 发​​生在关闭的弹出窗口上,因此用户不会受到它的影响,只会受到我们的日志的影响。

我试图通过这样做来处理它

      switch (response.status) 
        case 0:
          break;
        case -1:
          break;
        case 401:
          localStorageService.clearAll();
          redirectToUrlAfterLogin.url = $location.path();
          $location.path('/login');

AngularJS Issue #12920 中提出的建议

我们肯定会减少登录,但仍然有一些 HTTP -1 状态代码。我应该以不同的方式处理 -1 吗?

【问题讨论】:

【参考方案1】:

当请求中止或超时时,请求以错误状态-1 着陆。

取自the official docs:

此外,小于 -1 的状态代码被归一化为零。 -1 通常意味着请求被中止,例如使用config.timeout

timeout – number|Promise – 以毫秒为单位的超时,或承诺 解决后应该中止请求。

【讨论】:

【参考方案2】:

根据我的经验,-1 状态最常见的原因是浏览器因违反 Same Origin Policy. 而阻止了响应

出于安全原因,浏览器会限制从脚本中发起的跨域 HTTP 请求。例如,XMLHttpRequest 和 Fetch 跟在 same-origin policy 后面。因此,使用 XMLHttpRequest 或 Fetch 的 Web 应用程序只能向自己的域发出 HTTP 请求。为了改进 Web 应用程序,开发人员要求浏览器供应商允许跨域请求。

跨域资源共享 (CORS) 机制为 Web 服务器提供跨域访问控制,从而实现安全的跨域数据传输。现代浏览器在 API 容器中使用 CORS(例如 XMLHttpRequest 或 Fetch)来降低跨域 HTTP 请求的风险。

见Use CORS to allow cross-origin access.

【讨论】:

以上是关于Angular HTTP:状态 -1 和 CORS的主要内容,如果未能解决你的问题,请参考以下文章

Apache CORS OPTIONS 请求状态 501 错误

CORS 以某种方式阻止我的 Angular 和 Nestjs 应用程序进行通信

CORS 策略:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

AngularJS $http 从失败的 CORS 请求返回状态码 0

Angular $http.delete CORS 错误(预检请求)

CORS 和 Angular $http GET 到 Google Places API