AngularJS同源政策

时间:2015-09-02 18:36:18

标签: angularjs typescript

我们正在使用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实现这一目标的最佳途径是什么,如果现有解决方案,请指导我们。

谢谢。

2 个答案:

答案 0 :(得分:0)

错误不是由AngularJS引起的。这是API服务器响应中的标头的问题。

API服务器必须允许与CORS进行此通信。你控制API服务器吗?

答案 1 :(得分:0)

这显然是一个CORS问题。

如果它是GET方法请求,那么您可以使用 jsonp 来克服此问题。记住jsonp仅适用于GET请求。 如果没有,那么有很多方法可以解决这个问题。 其中一个在Windows.PostMessage中,但它与所有浏览器不兼容。 最好的方法是使用reverseProxy并从您的主域中,然后代理将其传递给子域。

有很多方法可以克服CORS问题。你只需谷歌吧。