[解決済み] CORSのエラーをトラップすることは可能ですか?
質問
この質問は、Cross-Origin Resource Sharing (CORS.) に関連するものです。 http://www.w3.org/TR/cors/ ).
CORS リクエスト時にエラーが発生した場合、Chrome(および AFAIK 他のブラウザー)はエラー コンソールにエラーをログに記録します。 メッセージの例は次のようになります。
XMLHttpRequest を読み込むことができません
http://domain2.example
. 起源http://domain1.example
は Access-Control-Allow-Origin で許可されません。
このエラーメッセージをプログラムで取得する方法はないでしょうか? 私は
xhr.send()
の呼び出しを try/catch でラップしてみました。
onerror()
イベントハンドラを追加してみました。 どちらもエラーメッセージを受け取りません。
どのように解決するのですか?
ご覧ください。
...また、CORSについてのXHR Level 2での注記もあります。
意図的にフィルタリングされた情報です。
何ヶ月も経ってから編集。最初のリンクのアンカーが数文字欠けていて、私が参照しているドキュメントのどの部分なのかがわかりにくくなっていました。
これはセキュリティの問題で、HTTP ヘッダーに含まれる機密性の高い情報の公開を回避するための試みです。CORS に関する W3C のリンクにはこうあります。
ユーザーエージェントは、CORS API 仕様で定義された API に応答ヘッダーを公開する前に、単純な応答ヘッダー、またはフィールド名が Access-Control-Expose-Headers ヘッダーの値の 1 つと ASCII ケース感受性で一致するもの以外のすべての応答ヘッダーをフィルタアウトしなければなりません(もしあるならば)。
その通路には、Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma をリストする "simple response header" のリンクが含まれています。そのため、これらはパスされます。Access-Control-Expose-Headers headers"の部分は、リモートサーバーが他のヘッダも公開できるように、そのヘッダをリストアップしています。詳しくはW3Cのドキュメントを参照してください。
ブラウザに読み込まれたウェブページで JavaScript が実行されているとすると、スクリプトは別のオリジンにリクエストします。そこで、スクリプトを実行し、HTTP リクエストを代行するブラウザがゲートキーパーとして機能します。
ブラウザは、他のオリジン サーバーからの応答を見て、それが CORS に参加していないように見える場合 (必要なヘッダーがない、または不正な形式である) は、信頼できない状態にあります。ローカルで実行されているスクリプトが誠実に動作しているかどうかを確認することはできません。ブラウザは、フィルタリングなしでスクリプトに応答全体を渡すことによって、リモート サーバーから機密情報を漏えいさせるべきではありません - それは基本的に を許可することになります。 を許可しているようなものです。情報漏洩の脆弱性が発生します。
これはデバッグを困難にしますが、セキュリティとユーザビリティのトレードオフであり、この文脈では "user"は開発者であるため、セキュリティは重要な優先事項です。
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] file:// URLから実行されるアプリケーションのリクエストで、"Origin null is not allowed by Access-Control-Allow-Origin" エラーが発生する。
-
[解決済み】プリフライトCORSリクエストの導入の動機は何ですか?
-
[解決済み】FirebaseのクラウドファンクションでCORSを有効にする
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?