我们正在使用AngularJS开发一个Web应用程序,我们希望从另一个应用程序中调用很少的rest api服务。这是一个跨域请求,因此我们无法调用它,我们收到以下错误。 (en.wikipedia.org/wiki/Same-origin_policy))
XMLHttpRequest无法加载http://appserver:9090/checkAndUpdate。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:8080”访问。响应的HTTP状态代码为400。
我们正在使用我们的打字稿模块(docs.angularjs.org/api/ng/service/$http)中的角度服务,如下所示,
////////
static $inject = ["$http"];
constructor(private $http: ng.IHttpService) {
}
public testApi(): ng.IPromise<any> {
var baseUrl = "http://appserver:9090";
var data = {requestData};
var response = this.$http.post(url+"/checkAndUpdate", data);
return response;
}
/////
我们想知道AngularJS实现这一目标的最佳途径是什么,如果现有解决方案,请指导我们。
谢谢。
答案 0 :(得分:0)
错误不是由AngularJS引起的。这是API服务器响应中的标头的问题。
API服务器必须允许与CORS进行此通信。你控制API服务器吗?
答案 1 :(得分:0)
这显然是一个CORS问题。
如果它是GET方法请求,那么您可以使用 jsonp 来克服此问题。记住jsonp仅适用于GET请求。 如果没有,那么有很多方法可以解决这个问题。 其中一个在Windows.PostMessage中,但它与所有浏览器不兼容。 最好的方法是使用reverseProxy并从您的主域中,然后代理将其传递给子域。
有很多方法可以克服CORS问题。你只需谷歌吧。