同一生成元ポリシーにより、 にhttp://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xmlデプロイされたファイルからajax 呼び出しを行うことはできません。http://run.jsbin.com
ソース (別名origin ) ページとターゲットURL が異なるドメイン (run.jsbin.comおよび) にあるため、コードは実際には通常の ではなく、クロスドメイン (CORS)リクエストwww.ecb.europa.euを作成しようとしています。GET
簡単に言うと、同一生成元ポリシーは、ブラウザーがHTML ページの同じドメインでサービスへの ajax 呼び出しのみを許可する必要があることを示しています。
例:
のページは、 のような にhttp://www.example.com/myPage.htmlあるサービスのみを直接リクエストできます。サービスが別のドメイン (たとえば) でホストされている場合、ブラウザーは (ご想像のとおり) 直接呼び出しを行いません。代わりに、CORS リクエストを作成しようとします。http://www.example.comhttp://www.example.com/api/myServicehttp://www.ok.com/api/myService
簡単に言うと、異なるドメイン間で (CORS) リクエスト* を実行するには、ブラウザは次のようになります。
* 上記は、派手なヘッダーのない通常のリクエストなど、単純なリクエストの手順を示しています。GETリクエストが単純でない場合 ( POSTwith application/jsonas コンテンツ タイプなど)、ブラウザはそれをしばらく保持し、それを満たす前に、最初にOPTIONSターゲット URL にリクエストを送信します。OPTIONS上記と同様に、このリクエストへのレスポンスに CORS ヘッダーが含まれている場合にのみ続行されます。このOPTIONS呼び出しは、プリフライトリクエストと呼ばれます。
**通常の呼び出しと CORS 呼び出しには他にも違いがあるため、ほぼ
言っています。重要なのは、一部のヘッダーは、応答に含まれていても、ヘッダーに含まれていない場合、ブラウザーによって取得されないということです。Access-Control-Expose-Headers
修正方法は?
ただのタイプミスでしたか?場合によっては、JavaScript コードのターゲット ドメインにタイプミスがあるだけです。チェックしましたか?ページが にある場合、!www.example.comへの通常の呼び出しのみが行われます。orwww.example.comなどの他の URL は、ブラウザによって異なるドメインと見なされます。はい、ポートが異なる場合、それは別のドメインです!api.example.comexample.comwww.example.com:8080
ヘッダーを追加します。CORS を有効にする最も簡単な方法は、必要なヘッダー (としてAccess-Control-Allow-Origin) をサーバーの応答に追加することです。(各サーバー/言語にはそれを行う方法があります-ここでいくつかの解決策を確認してください。)
最後の手段:サーバー側でサービスにアクセスできない場合は、(リバース プロキシなどのツールを使用して) ミラーリングし、そこに必要なすべてのヘッダーを含めることもできます。