问题

我使用ngResource在Amazon Web服务上调用REST API时收到此错误:

javascript – XMLHttpRequest无法加载 http://server.apiurl.com:8000/s/login?login=facebook .对 Preflight请求不通过访问控制检查:否 请求中出现“Access-Controll-Allow-Origin”标题 资源.原始’ http://localhost ’因此不允许访问. 错误405

服务:

 socialMarkt.factory('loginService', ['$resource', function($resource){    
    var apiAddress = "http://server.apiurl.com:8000/s/login/";
    return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
                getUser: {method:'POST'}
            });
}]);
 

控制器:

 [...]
loginService.getUser(JSON.stringify(fbObj)),
                function(data){
                    console.log(data);
                },
                function(result) {
                    console.error('Error', result.status);
                }
[...]
 

我正在使用Chrome,我不知道为了解决这个问题还需要做什么.我甚至配置了服务器来接受来源localhost的标题.

  最佳答案

您正在处理 CORS 问题。

有几种方法可以修复/解决这个问题。

  1. 关闭CORS.例如:如何关闭chrome 中的cors
  2. 为浏览器使用插件
  3. 使用代理,如nginx.示例如何设置

更详细地说,您正在尝试从localhost访问api.serverurl.com.这是跨域请求的确切定义.

通过关闭它只是为了完成您的工作(好的,如果您访问其他站点并且只是启动可以下路的安全性很差),您可以使用代理,使您的浏览器认为所有请求都来自本地主机,当您真的有本地服务器然后调用远程服务器时。

所以api.serverurl.com可能成为localhost:8000 / api,您的本地nginx或其他代理将发送到正确的目的地.


现在,根据流行的需求, 100% CORS info .................同样的品尝!


对于下选民来说...绕过CORS正是那些简单地学习前端的人们所看到的。 https://codecraft.tv/courses/angular/http/http-with-promises/

  相同标签的其他问题

javascriptajaxhttpcorshttp-status-code-405