我在向网络API(api.worldbank.org)发送跨域请求时遇到问题。它说
请求时没有'Access-Control-Allow-Origin'标头 资源。因此,不允许原点“http://127.0.0.1”访问。
正如有人建议的那样,我使用了这个 -
app.config( function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
);
但仍然是错误相同,并且在添加或不添加此代码的标头中也不会发生更改。
完整的代码就是这个 -
'use strict';
var app=angular.module('myapp',[]);
app.config( function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
);
app.factory('dataFactory',function($http){
var O={};
O.getLifeExpectancy=function(){
var dataToSend={};
$http({
method:'GET',
url:'http://api.worldbank.org/countries/in/indicators/SP.DYN.LE00.IN?format=json&date=2000:2015'
}).then(function(data){
dataToSend=data;
});
return dataToSend;
};
我做错了吗? 是$ http和$ httpProvider两个不同的东西,因为没有变化反映在带或不带app.config代码的标题中。
这两种情况都是我的标题 -
接受:application / json,text / plain, / Accept-Encoding:gzip, deflate,sdch Accept-Language:en-US,en; q = 0.8 Cache-Control:max-age = 0 连接:keep-alive主持人:api.worldbank.org原产地:127.0.0.1 Referer:127.0.0.1/myApp/ User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64平台; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 51.0.2704.106 Safari / 537.36
答案 0 :(得分:1)
此消息表明您的服务器端代码不允许来自不同域的请求,因此最佳解决方案是在服务器端启用带有标头Access-Control-Allow-Origin: '*'
的CORS。
编辑:如果您的Angular应用程序将在浏览器中运行 - 您需要设置CORS服务器端或只在您的域上设置一些代理(某些浏览器默认阻止此类请求)。
但是如果您正在使用Cordova / PhoneGap移动应用程序,您将能够在config.xml中禁用它,因此目前出于测试目的,您可以在浏览器中禁用它。