AngularJS:通过https提供$资源,从https到http的Angular交换机

时间:2014-09-11 20:56:31

标签: javascript angularjs rest nginx https

我在AngularJS项目中设置了一个ng-resource,它从REST API获取数据。一切都在开发和测试环境中运行良好(都通过http运行)。但是,在生产中,由于No 'Access-Control-Allow-Origin' header错误,REST请求失败。

整个页面都是通过https提供的,因此我希望Angular的请求也可以通过https保留。我使用相对路径(例如/ api /)设置资源,但AngularJS似乎从https更改为http。

我的问题

  1. 即使使用相对的api urls,什么可能导致请求http而不是https?
  2. 是否有任何好的Angular文档如何处理$httpresource的https请求?
  3. 这可能是nginx的服务器配置问题吗?对我而言,Angular似乎只是自动从https切换到http。
  4. 完整错误消息

    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/**'
      ]);
    })
    

2 个答案:

答案 0 :(得分:1)

我认为它与https无关,您可以使用带有$ http和$资源的Https而不做任何更改。如果只使用https访问索引,则所有请求都将是https。

问题应该是关于" No' Access-Control-Allow-Origin'报头&#34 ;.您应该在服务器端启用CORS。关于这一点已有很多指南。

答案 1 :(得分:0)

$ sceDelegateProvider不适用于https。仅支持http。