同一生成元ポリシーにより、 に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.com
http://www.example.com/api/myService
http://www.ok.com/api/myService
簡単に言うと、異なるドメイン間で (CORS) リクエスト* を実行するには、ブラウザは次のようになります。
* 上記は、派手なヘッダーのない通常のリクエストなど、単純なリクエストの手順を示しています。GET
リクエストが単純でない場合 ( POST
with application/json
as コンテンツ タイプなど)、ブラウザはそれをしばらく保持し、それを満たす前に、最初にOPTIONS
ターゲット URL にリクエストを送信します。OPTIONS
上記と同様に、このリクエストへのレスポンスに CORS ヘッダーが含まれている場合にのみ続行されます。このOPTIONS
呼び出しは、プリフライトリクエストと呼ばれます。
**通常の呼び出しと CORS 呼び出しには他にも違いがあるため、ほぼ
言っています。重要なのは、一部のヘッダーは、応答に含まれていても、ヘッダーに含まれていない場合、ブラウザーによって取得されないということです。Access-Control-Expose-Headers
修正方法は?
ただのタイプミスでしたか?場合によっては、JavaScript コードのターゲット ドメインにタイプミスがあるだけです。チェックしましたか?ページが にある場合、!www.example.com
への通常の呼び出しのみが行われます。orwww.example.com
などの他の URL は、ブラウザによって異なるドメインと見なされます。はい、ポートが異なる場合、それは別のドメインです!api.example.com
example.com
www.example.com:8080
ヘッダーを追加します。CORS を有効にする最も簡単な方法は、必要なヘッダー (としてAccess-Control-Allow-Origin
) をサーバーの応答に追加することです。(各サーバー/言語にはそれを行う方法があります-ここでいくつかの解決策を確認してください。)
最後の手段:サーバー側でサービスにアクセスできない場合は、(リバース プロキシなどのツールを使用して) ミラーリングし、そこに必要なすべてのヘッダーを含めることもできます。