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 调用获取数据