Rest api在chrome中返回“网络连接失败”,但在firefox中工作正常

Posted

技术标签:

【中文标题】Rest api在chrome中返回“网络连接失败”,但在firefox中工作正常【英文标题】:Rest api returns "Network connection Failure" in chrome but working fine in firefox 【发布时间】:2018-02-24 15:47:00 【问题描述】:

我的 rest api 失败的最长时间,有时它可以在 chrome 中运行,但它总是在 Firefox 中运行。 当调用 api 旧数据时响应。 Cors 也通过适当的规则启用。 根据我的观察,它在 2017 年 9 月 2 日最近的 chrome 更新后开始发生。

使用的技术:- Java,Angularjs

以下是 api 失败时我得到的错误:- XMLHttpRequest 无法加载。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许 Origin 访问。回复有HTTP status code 403.

获取API代码:-

 executeGet: function () 
  var deferred = $q.defer();
  $http(
    url: REST_API.SERVICE_BASE_URL + encodeURI(this.restURI),
    method: 'GET',
    timeout: 2000,
    cache: false,
    headers: 'Content-Type': 'application/json',
    withCredentials: true,
  ).then(function (response) 
    deferred.resolve(response.data, response.status, response.headers, response.config);
    $log.debug( 'URL - '+ url_called, response.data, response.status);
  ,function (response) 
    deferred.reject(response.data, response.status, response.headers, response.config);
    $log.debug( 'URL - '+ url_called, response.data, response.status);
  );
  return deferred.promise;
,

提前致谢。

【问题讨论】:

我的 rest api 失败,有时它可以在 chrome 中运行。请所有医生来这里进行危重手术。 :'( :'( “HTTP 状态码 403” 表示身份验证失败。因此,当这种情况发生时,请检查向您发送 403 响应的服务器上的服务器日志,然后进去看看为什么在这种情况下会发生 403 失败而不是在其他情况下发生。 【参考方案1】:

很遗憾,无法从这个描述中帮助您。这与成为 REST API 无关,Chrome 与 Firefox 的对比似乎只是巧合。

要找出丢失Access-Control-Allow-Origin 的原因,您需要像调试其他任何东西一样调试您的应用程序。这可以通过几种方式完成。

您可以启用 New Relic 或 Data Dog 以尝试以智能形式捕获错误和其他调试信息,您可以使用 Papertrail、Logentries 等查看日志跟踪,您可以使用 Rollbar 来查看被触发的异常如果那比New Relic便宜一点。

很可能触发了一些错误(验证、身份验证等),这使您的应用程序提前返回,并且不会触发处理 CORS 的任何层。我无法猜测那可能是什么,因为您刚刚输入了“Java”,我们不知道它是 Spring、其他东西还是自定义。

祝您调试顺利!

【讨论】:

【参考方案2】:

我遇到了同样的问题,它通过 Chrome 工作,但通过 AngularJS 访问时却没有。我在服务器端使用 Spring Boot。我的解决方案是在服务器端启用允许 CORS。在 Spring 中,您可以使用 WebMvcConfigurer 启用。 WebMvcConfigurer enabling CORS

【讨论】:

CORS 已在服务器端启用。我在问题描述中提到过。 :)【参考方案3】:

在 Chrome 中安装扩展 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi 并启用跨源资源

【讨论】:

我应该告诉我成千上万的客户安装这个扩展。根本不是一个合适的解决方案。 CORS 已启用。 :)

以上是关于Rest api在chrome中返回“网络连接失败”,但在firefox中工作正常的主要内容,如果未能解决你的问题,请参考以下文章

Java Spring REST API CORS 不适用于通过 jQuery 和 Chrome 的 DELETE 请求

ReactJS 应用程序无法使用 REST API 调用获取数据

将大型 JSON 直接从 Java 中的 REST API 响应流保存为文本

Node JS在rest api响应中返回图像[关闭]

返回 REST API 中错误 HTTP 方法的代码?

无法在 SpringBoot 中使用 ControllerAdvice 返回 rest api 响应