[解決済み] jQuery XML エラー ' 要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません'.
質問
私は個人的なプロジェクトで、以下の場所にある xml ファイルを読み込むことを楽しんでいます。 http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml にある xml ファイルを読み込んで、xml を解析し、それを使用して通貨間の値を変換したいと思います。
今のところ、XMLを読み取るためのかなり基本的な以下のコードを思いつきましたが、次のエラーが発生しました。
XMLHttpRequest は **** を読み込むことができません。要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーがありません。 ヘッダが要求されたリソースに存在しません。オリジン 'http://run.jsbin.com'はアクセスを許可されていません。
$(document).ready(
function() {
$.ajax({
type: 'GET',
url: 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',
dataType: 'xml',
success: function(xml){
alert('aaa');
}
});
}
);
私のコードには何も問題がないようなので、誰かが私のコードで何が間違っているのか、どのようにそれを修正すればよいのかを指摘してくれることを期待しています。
どのように解決するのですか?
への ajax 呼び出しができなくなります。
http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
に配置されたファイルから
http://run.jsbin.com
のため
同一生成元ポリシー
.
ソースとして(別名
オリジン
) ページと
ターゲット
の URL が異なるドメインにある場合 (
run.jsbin.com
と
www.ecb.europa.eu
を含む)、あなたのコードが実際に作ろうとしているのは
クロスドメイン (CORS)
リクエストではなく、通常の
GET
.
一言で言えば 同一生成元ポリシー でのサービスに対する ajax 呼び出しのみを許可すべきであると言っています。 同じドメイン でのサービス呼び出しのみを許可すべきであると述べています。
例
のページ
http://www.example.com/myPage.html
にあるサービスを直接要求することだけが可能です。
http://www.example.com
のように
http://www.example.com/api/myService
. サービスが別のドメインでホストされている場合 (例えば
http://www.ok.com/api/myService
のように)、ブラウザは直接呼び出しを行いません(期待通り)。その代わり、CORS リクエストを作成しようとします。
短く言うと、異なるドメイン間で (CORS) リクエスト* を実行するために、ブラウザは。
-
を含むことになります。
Origin
ヘッダを含み (ページのドメインを値として)、通常通り実行します。 -
の場合のみ
サーバー
レスポンス
には、そのリクエストに対する
適切なヘッダ (
Access-Control-Allow-Origin
は 一 そのうち ) が CORS リクエストを許可すると、ブラウズは呼び出しを完了します (ほとんど** HTML ページが同じドメインにある場合と同じ方法です)。- 期待されるヘッダーが来ない場合、ブラウザーは単にあきらめます (あなたに対して行ったように)。
* 上記は
簡単
リクエスト、例えば通常の
GET
のような単純なリクエストで、 派手なヘッダがない場合です。リクエストが単純でない場合 (たとえば
POST
と
application/json
をコンテンツタイプとする場合)、ブラウザはそれをしばらく保持し、それを実行する前に最初に
OPTIONS
リクエストをターゲット URL に送信します。上記のように、もしこの
OPTIONS
リクエストへのレスポンスが CORS ヘッダを含んでいる場合のみ、処理を続行します。この
OPTIONS
という呼び方で知られています。
プリフライト
のリクエストに対応します。
** 私が言っているのは
ほとんど
と言っているのは、通常の呼び出しと CORS 呼び出しの間には他の違いがあるからです。重要なのは、一部のヘッダーが、たとえレスポンスに存在するとしても
に含まれていない場合、レスポンスに存在してもブラウザに拾われないということです。
Access-Control-Expose-Headers
ヘッダを表示します。
どのように修正するのですか?
単なるタイプミスですか?
JavaScriptのコードに、ターゲットドメインのタイプミスがあるだけの場合があります。確認はされましたか?もし、そのページが
www.example.com
にある場合は、通常の呼び出しを行うだけです。
www.example.com
! 他の URL、例えば
api.example.com
あるいは
example.com
または
www.example.com:8080
は
異なる
ドメインとみなされます。そう、ポートが違えば、それは異なるドメインなのです!
ヘッダを追加してください。
最も簡単な方法は
を有効にする
CORS を有効にする最も簡単な方法は、必要なヘッダを追加することです (たとえば
Access-Control-Allow-Origin
) をサーバのレスポンスに追加します。(各サーバ/言語には、そのための方法があります - 。
はここでいくつかの解決策を確認します。
.)
最後の手段です。 サーバーサイドでサービスにアクセスできない場合、ミラーリングすることもできます (たとえば リバースプロキシ などのツールを使って)ミラーリングし、そこに必要なヘッダをすべて含めることができます。
関連
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] Access-Control-Allow-Origin複数オリジンのドメイン?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] file:// URLから実行されるアプリケーションのリクエストで、"Origin null is not allowed by Access-Control-Allow-Origin" エラーが発生する。
-
[解決済み] アクセス制御-許可-起源のワイルドカードサブドメイン、ポート、プロトコル
-
[解決済み】Access-Control-Allow-OriginでOriginが許可されない。
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] 要求されたリソースに 'Access-Control-Allow-Origin' ヘッダが存在しない エラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行