web-dev-qa-db-ja.com

XHRクロスオリジンリクエスト中にプリフライトリクエストは行われません

python Simple HTTP ServerでホストされているhtmlファイルからXHRクロスオリジンリクエストを作成しました。

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.facebook.com/favicon.ico", true);
xhr.withCredentials = true;
xhr.onload = function () {
    console.log(xhr.responseText);
};
xhr.send();

Chrome開発者ツールを開き、Networkタブでリクエストを監視します。 Networkタブに、サーバー "facebook.com"に対して直接要求が1つ表示されます。

XHR Cross-Origin Request

私が異常だと思った行動は次のとおりです。

  1. ここで言及されているドキュメントによると、直接XHRリクエストが行われる前にプリフライトリクエストが表示されることを望んでいました。 link

  2. リクエストはステータスコードを取得しました:* 200 **これは異常です。 SOPはクロスドメインリクエストであるため、この種のリクエストをブロックする必要があります。

しかし、Chrome開発者ツールConsoleタブに、期待される動作:

XHR Cross-Origin Request denied access

1
aka_007

CORSヘッダーを確認するプリフライトリクエストは、XHRなしで実行できないリクエストがXHRなしでは実現できない場合にのみ実行されます。あなたの場合、特別なヘッダーなしで単純なGETリクエストを実行しているだけで、同じURLまたは類似の画像を含めることによっても実行できます。したがって、リクエストをプリフライトする必要はありません。

詳細については、「単純」と見なされてプリフライトされないリクエストと、単純ではないリクエストを参照してください。MozillaDeveloper NetworkのCORSへのドキュメントの Preflighted Requests を参照してください。

3
Steffen Ullrich