【问题标题】:AngularJS : No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed accessAngularJS:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问
【发布时间】:2016-05-27 16:42:02
【问题描述】:

我正在尝试通过连接到 RESTful API 来使用 AngularJS $http 服务进行 ajax 调用。

我得到的结果:

XMLHttpRequest 无法加载 http://hostname:8080/abc/test。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许访问 Origin 'null'。

我知道我正在做一个XMLHttpRequest to a different domain。所以浏览器会阻止它,因为出于安全原因,它通常允许来自同一来源的请求。

要求的代码:

$http({
method: 'GET',
cache: true,
url: "http://hostname:8080/abc/test"
}).then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
});

我阅读了很多关于 stackoverflow 的问题:

No 'Access-Control-Allow-Origin' header is present on the requested resource error
Access-Control-Allow-Origin header
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '…' is therefore not allowed access

但没有成功。 任何直接的帮助都将是非常可观的。谢谢

【问题讨论】:

    标签: javascript angularjs ajax http cross-domain


    【解决方案1】:

    您确定这在您的代码中吗?

    url: http://hostname:8080/abc/test
    

    因为url当然应该是字符串

    url: "http://hostname:8080/abc/test"
    

    此外,您还必须允许服务器上的跨源请求。如何做到这一点取决于您的服务器。你的服务器是用什么写的? php?爪哇?哪些框架?等等

    【讨论】:

    • 很好,我错过了。他也可以尝试方法:'JSONP' 这通常会解决这个问题。
    • 是的请求 url 是正确的。它只是演示,但原始 url 是相同的格式。用 java 编写的服务器。所以我正在调用另一个主机上可用的 restful api
    • 好吧,Java 就是这样。您是否使用任何框架,如 spring、jersey 等?根据框架的不同,如何添加跨源支持有不同的解决方案。但是,所有这些都有一个共同点,即您尝试提供一个名为“Access-Control-Allow-Origin”的标头并将您的应用程序 url 添加到其中。出于测试目的,您可以从标题中的简单通配符“Access-Control-Allow-Origin”:“*”开始
    • Api 是用 java 编写的,但我是从 angularjs 调用 api
    • 是的,我知道,但您的问题不是客户端问题,而是服务器问题 - 因此您将无法在 angularjs 代码中修复它。必须更改服务器代码才能允许从您的 api 进行跨源调用。服务器代码是自己的还是外部的?
    【解决方案2】:

    我今天早些时候在自定义编写的 golang 服务器上遇到了这个问题。

    如果您要连接到自定义编码服务器搜索

    “{Language} cors”

    如果您使用给定的 api 搜索 "{Server} cors"

    你应该找到一些东西

    【讨论】:

      【解决方案3】:

      我得到了我发布的这个问题的答案,现在它工作正常。

      我们必须使用 JSONP 来防止跨域策略。

      代码:

      var url = "http://hostname:8080/abc/test?callback=JSON_CALLBACK";
      
      $http.jsonp(url)
          .success(function(data){
              console.log(data);
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-09
        • 2014-03-13
        • 2018-07-06
        • 2013-12-24
        • 2018-10-23
        • 2017-07-17
        • 2017-02-04
        相关资源
        最近更新 更多