AngularJS: Servant des ressources $ via https, les commutateurs angulars passent de https à http

J’ai créé une ressource ng dans mon projet AngularJS qui obtient des données d’une API REST. Tout fonctionne bien dans les environnements de développement et de test (tous deux exécutés sur http). Cependant, en production, les demandes REST échouent en raison d’une erreur d’en- No 'Access-Control-Allow-Origin' header .

La page entière est servie via https, donc je m’attendrais à ce que la requête de Angular soit également transmise via https. Je configure la ressource avec un chemin relatif (par exemple / api /), mais AngularJS semble changer de https à http.

Mes questions

  1. Qu’est-ce qui pourrait provoquer la requête sur http au lieu de https même avec les URL de l’API relatives?
  2. Existe-t-il une bonne documentation angular sur la gestion des requêtes https pour $http ou une resource ?
  3. Cela pourrait-il être un problème de configuration du serveur avec nginx? Pour moi, il semble qu’Angular passe automatiquement de https à http.

Message d’erreur complet

 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. 

Configuration de la ressource AngularJS

  .factory('Data', ['$resource', function($resource){ return $resource('/api/data\\/', {}, { query: { url:'/api/data/', method: 'GET', isArray: true} }, { ssortingpTrailingSlashes: false }); }]) 

J’ai des domaines http et https sur liste blanche dans le projet AngularJS, mais cela n’a apporté aucune modification aux requêtes https.

 .config(function($sceDelegateProvider) { $sceDelegateProvider.resourceUrlWhitelist([ 'self', 'http://www.example.com/**', 'https://www.example.com/**' ]); }) 

Je pense que ce n’est pas lié à https, vous pouvez utiliser Https avec $ http et $ resource sans aucun changement. Si seulement vous accédez à l’index avec https, toute demande sera https.

Le problème devrait concerner l’en-tête “No ‘Access-Control-Allow-Origin”. Vous devez activer CORS sur votre serveur. Il existe déjà de nombreux guides à ce sujet.

$ sceDelegateProvider ne fonctionne pas avec https. Seul http est pris en charge.