我在使用ngResource调用Amazon Web Services上的REST API时遇到此错误:
XMLHttpRequest无法加载 http://server.apiurl.com:8000/s/login?login=facebook。对预检请求的响应未通过访问控制检查:请求的资源上不存在“ Access-Control-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,但我不知道该怎么做才能解决此问题。我什至将服务器配置为接受origin的标头localhost
。
您遇到了CORS问题。
有几种方法可以解决此问题。
更详细地说,您正在尝试从本地主机访问api.serverurl.com。这是跨域请求的确切定义。
通过关闭它来完成您的工作(确定,如果您访问其他站点并给您带来安全隐患,那么您可以使用代理)使您的浏览器认为所有请求都来自本地主机。确实,您有本地服务器,然后再调用远程服务器。
因此api.serverurl.com可能会变为localhost:8000 / api,而您的本地nginx或其他代理将发送到正确的目的地。
对于不愿花钱的人……绕过CORS正是那些仅仅学习前端的人所看到的。 https://codecraft.tv/courses/angular/http/http-with-promises/
遗漏了正确实施CORS的明显方法之一
投票很容易。我的朋友,自己冒险不太容易。所有这些工作完全在开发环境中进行。
它确实有效。我添加了标志以禁用Web安全性。为了发展是好的。
@charlietfl怎么样?
谢谢你救了我的日子。仅使用第一个选项:C:\ Program Files(x86)\ Google \ Chrome \ Application> chrome.exe --user-data-dir =“ C:\ Chrome开发者会话” --disable-web-security。来自:stackoverflow.com/questions/3102819/…