2016-04-27 6 views
2

質問: ブラウザ/ Postman/Node.js(http.getメソッド)からでもREST APIリクエストを作成できますが、Angularのリソースからはリクエストできません。ブラウザからREST APIリクエストを作成できますが、Angularのリソースからリクエストできないのはなぜですか?

エラーメッセージの抜粋です:

XMLHttpRequest cannot load http://example-of-external-api-site.com 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost' is therefore not allowed access. 

これを尋ねる前に、私はCORSの定義を見てみてください。私が理解しているように、Angularのリソースから得たリクエストがなぜ別のドメインから来ているのかという理由から、なぜそれが許可されないのか理解できます。しかし、私のブラウザ/ Postman/Node.jsアプリも別のドメインのものではないのですか?

私はこれを答える助けてください、私は本当に

URLを直接アクセスする際に要求がブラウザから作られ

答えて

2

は、あなたがXMLHttpRequestを使用せずに、URLのコンテンツを要求している...理由を理解することはできません。

$http.get()のための2つのシナリオがあります

があなたのAngularJSコンテンツをホストしている同じドメインでないURIにアクセスすると、ブラウザのレンダリングされたコンテンツの中からXMLHttpRequestを利用AJAX呼び出しを経由して、あなたが提供しなければなりませんターゲットサーバー上のホワイトリストに一致するCORsヘッダー。これは、クロスサイトスクリプティングなどの悪質な悪意のある攻撃を防ぐためのブラウザのセキュリティ制限によるものです。

AngularJSコンテンツをホストしているドメインと同じドメインにアクセスする場合(通常、相対パス経由で行われる場合:http://domain.com/api/1の代わりに/Api/1)、起点ドメインとターゲットドメインの両方が同じ。

最後に、ノードからurlを呼び出すときに、ブラウザ内で実行されていないため、同じセキュリティ制限を持たないサーバーからサーバーへの同時呼び出しが行われています。

+0

$ http.get()経由でuriにアクセスする場合、ブラウザのレンダリングされたコンテンツからXMLHttpRequestを利用したajax呼び出しを介してAngularJSコンテンツをホストするドメイン以外のドメインからリソースを要求しています。これを行うときは、ブラウザのセキュリティ制限に従って、サーバー上のホワイトリストに一致するCORsヘッダーを指定する必要があります。私は、$ http.getを実行すると、AngularJSコンテンツをホストしているドメインからリソースを要求していると仮定しています。 – kelvien

+0

投稿したエラーメッセージに基づいて間違っています。 'XMLHttpRequest'を介して' http:// example-of-external-api-site.com'にリソースを要求しているので、CORが発行します。相対パスで常に要求していた場合、コンテンツをホストしているのと同じドメインからリソースを要求することだけが保証されます。 –

+0

私はドメインからXMLHttpRequestを介して 'example-of-external-api-site.com'にリソースをリクエストすることで、CORSの問題がどのように存在するのか理解しています。私が明確にしたいのは、あなたのAngularJSコンテンツをホストしているドメイン以外のドメインからの言葉です。 – kelvien

関連する問題