我在AngularJS项目中设置了一个ng-resource,它从REST API获取数据。一切都在开发和测试环境中运行良好(都通过http运行)。但是,在生产中,由于No 'Access-Control-Allow-Origin' header
错误,REST请求失败。
整个页面都是通过https提供的,因此我希望Angular的请求也可以通过https保留。我使用相对路径(例如/ api /)设置资源,但AngularJS似乎从https更改为http。
我的问题
$http
或resource
的https请求?完整错误消息
XMLHttpRequest cannot load http://www.example.com/api/data/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.example.com' is therefore not allowed access.
AngularJS资源设置
.factory('Data', ['$resource',
function($resource){
return $resource('/api/data\\/', {}, {
query: {
url:'/api/data/',
method: 'GET',
isArray: true}
},
{ stripTrailingSlashes: false });
}])
我已将AngularJS项目中的http和https域列入白名单,但这并没有对https请求进行任何更改。
.config(function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist([
'self',
'http://www.example.com/**',
'https://www.example.com/**'
]);
})
答案 0 :(得分:1)
我认为它与https无关,您可以使用带有$ http和$资源的Https而不做任何更改。如果只使用https访问索引,则所有请求都将是https。
问题应该是关于" No' Access-Control-Allow-Origin'报头&#34 ;.您应该在服务器端启用CORS。关于这一点已有很多指南。
答案 1 :(得分:0)
$ sceDelegateProvider不适用于https。仅支持http。