2017-06-14 1 views
1

J'ai une erreur que je ne peux pas corriger. Il se passe d'une http GET dans Angular2 qui ressemble à ceci:S'agit-il d'une requête inter-domaines ou inter-protocoles?

constructor(private http: Http) {} 

... 

this.http.get('someApi.abc.com/stuff?params`) 

qui échoue avec une erreur qui ressemble à ceci:

XMLHttpRequest ne peut pas charger http://someApi.abc.com/stuff?params « à » http://elsewhere.abc.com/ 'a été bloqué par CORS: Non L'en-tête 'Access-Control-Allow-Origin' est présent sur la ressource demandée. L'origine 'http://local.abc.com' n'est donc pas autorisée .

Je pense qu'il y a 2 problèmes: une redirection que je ne comprends pas (peut-être besoin de contacter le propriétaire de someApi?) Et un problème CORS.

Ma compréhension est que le domaine est: abc.com Et le protocole est: http Il devrait y avoir pas de bêtises CORS impliqués. Je suis apparemment mal, mais ne comprends pas pourquoi :(

+0

vous devez vous disposer r application backend – alehn96

Répondre

1

La politique d'origine est basée sur les domaines qui ont besoin de correspondre exactement. local.abc.com ne correspond pas exactement someApi.abc.com. Alors http://local.abc.com et http://someApi.abc.com sont deux origines complètement différentes Donc, si vous avez un code JavaScript qui fonctionne à l'origine http://local.abc.com et qu'il fait une demande à http://someApi.abc.com, alors c'est une demande d'origine croisée et donc CORS est impliqué, en particulier, les navigateurs ne permettent pas à votre code JavaScript d'accéder à la réponse à partir d'une telle demande si le site http://someApi.abc.com n'envoie pas l'en-tête de réponse Access-Control-Allow-Origin dans ses réponses

+0

Je vois. Je n'avais pas réalisé que 'someApi' devait correspondre aussi. Il devra alors être d'origine croisée, et c'est sur l'API de retourner un en-tête 'Access-Control-Allow-Origin' dans la réponse. Dois-je faire quelque chose avec les en-têtes de mon côté pour m'assurer que cela fonctionnera? – user2759883

+0

En ce qui concerne le protocole CORS, vous n'avez rien à faire avec les en-têtes côté client à partir de votre code frontal. Le seul cas où des en-têtes CORS spéciaux sont envoyés du côté client sont les en-têtes de requête Access-Control-Request-Headers et Access-Control-Request-Method, mais ceux-ci sont automatiquement envoyés par les navigateurs. les navigateurs se débrouillent seuls. L'en-tête de demande d'origine fait également partie du protocole CORS, et est toujours envoyé pour les demandes d'origine croisée à partir de JS frontend - mais encore une fois, les navigateurs d'en-tête de requête s'ajoutent automatiquement – sideshowbarker