質問

この質問は、クロスオリジンリソースシェアリング(CORS、 http://www.w3)に関連しています。org / TR / cors / )。

CORSリクエストを行うときにエラーが発生した場合、Chrome(およびAFAIKの他のブラウザも)はエラーコンソールにエラーを記録します。メッセージの例は次のようになります。

XMLHttpRequestはhttp://domain2.exampleをロードできません。Originのhttp://domain1.exampleは、Access-Control-Allow-Originでは許可されていません。

このエラーメッセージをプログラムで取得する方法があるかどうか疑問に思っていますか?xhr.send()呼び出しをtry / catchでラップしようとしました。また、onerror()イベントハンドラーを追加しようとしました。どちらもエラーメッセージを受信しません。

役に立ちましたか?

解決

参照:

  • http:// www .w3.org / TR / cors /#handling-a-response-to-a-cross-origin-request

    ...およびCORSに関するXHRレベル2のメモ:

    • http://www.w3.org/TR/XMLHttpRequest2/ >

      情報は意図的にフィルタリングされています。

      数か月後の編集:ここでのフォローアップコメントは「理由」を尋ねました。最初のリンクのアンカーにいくつかの文字が欠落していたため、ドキュメントのどの部分を参照しているかがわかりませんでした。

      これはセキュリティ上の問題です。機密性の高いHTTPヘッダーの情報を公開しないようにする試みです。 CORSに関するW3Cリンクには次のように書かれています:

      ユーザーエージェントは、単純な応答ヘッダーであるもの、またはフィールド名がAccess-Control-Expose-Headersヘッダーの値の1つと大文字と小文字を区別しないASCII一致であるもの以外のすべての応答ヘッダーをフィルターで除外する必要があります(if any)、CORSAPI仕様で定義されたAPIに応答ヘッダーを公開する前。

      そのパッセージには、Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、およびPragmaをリストする「simpleresponseheader」へのリンクが含まれています。だからそれらは合格します。 「Access-Control-Expose-Headersheaders」の部分では、リモートサーバーが他のヘッダーもそこにリストすることで公開できます。詳細については、W3Cのドキュメントを参照してください。

      オリジンが1つあることを忘れないでください。たとえば、ブラウザに読み込んでJavaScriptを実行しているウェブページで、スクリプトが別のオリジンにリクエストを送信しています。これは、マルウェアが実行できるため、通常は許可されていません。そのように厄介なこと。したがって、スクリプトを実行し、ブラウザに代わってHTTPリクエストを実行するブラウザは、ゲートキーパーとして機能します。

      ブラウザはその「他のオリジン」サーバーからの応答を確認し、CORSに「参加」していないように見える場合(必要なヘッダーが欠落しているか、形式が正しくない場合)、私たちはノーの立場にあります。信頼。ローカルで実行されているスクリプトが、この方法で接続されることを期待していないサーバーに接続しようとしているように見えるため、誠意を持って動作していることを確認できません。ブラウザは、フィルタリングせずに応答全体をスクリプトに渡すだけで、そのリモートサーバーから機密情報を「漏らして」はなりません。これは、基本的に、ある種のクロスオリジンリクエストを許可します。情報開示の脆弱性が発生します。

      これによりデバッグが困難になる可能性がありますが、これはセキュリティと使いやすさのトレードオフであり、「ユーザー」はこのコンテキストでは開発者であるため、セキュリティが非常に優先されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top