我的休息api失败的最长时间,有时它在chrome中工作但它总是在firefox中工作。 当调用api时,旧数据即将响应。 科尔斯也有适当的规则。 根据我的观察,它是在2017年9月2日最近的Chrome更新后开始发生的。
使用的技术: - Java,Angularjs
以下是api失败时出现的错误: -
XMLHttpRequest
无法加载。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-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;
},
提前致谢。
答案 0 :(得分:0)
可悲的是,从这个描述中帮助你是不可能的。这与REST API无关,Chrome和Firefox似乎只是巧合。
要找出导致此缺失Access-Control-Allow-Origin
的原因,您需要像调整其他任何内容一样调试应用程序。这可以通过几种方式完成。
您可以启用New Relic或Data Dog以尝试以智能形式捕获错误和其他调试信息,您可以使用Papertrail,Logentries等查看日志记录,您可以使用Rollbar查看正在触发的异常如果那比New Relic便宜一点。
很可能会触发一些错误(验证,验证,某些东西),这会使您的应用程序提前返回,并且它不会触发任何层处理CORS。我不能对可能是什么做出任何猜测,因为你只是放了“Java”而我们不知道它的Spring,别的还是习惯。
祝你好好调试!
答案 1 :(得分:0)
我遇到了同样的问题,它通过Chrome工作,但在通过AngularJS访问时没有。我在服务器端使用Spring启动。我的解决方案是在服务器端启用允许CORS。在Spring中,您可以使用WebMvcConfigurer启用。 WebMvcConfigurer enabling CORS
答案 2 :(得分:0)
在Chrome中安装扩展程序https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi 并启用cros origin资源