web-dev-qa-db-ja.com

CORSとOriginヘッダー?

Ajaxリクエストを呼び出す必要がある場合は、次のようにします。

if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
else
{
    var versions = ["Microsoft.XmlHttp",
            "MSXML2.XmlHttp",
            "MSXML2.XmlHttp.3.0",
            "MSXML2.XmlHttp.4.0",
            "MSXML2.XmlHttp.5.0"
    ];

私はすでにXMLHttpRequest-2、Origin間のクロスリクエストを作成できます[〜#〜] and [〜#〜] Originヘッダーが追加されます。

質問:

  • このヘッダーが追加されたとき?

    • ブラウザ(CORSをサポートする)がリクエストを実行しているときに追加されますか? (クロスドメインまたは非クロスドメイン?)
    • または、リクエストのターゲットOriginが現在のOriginと異なることをブラウザが「認識する」ときに自動的に追加されますか...

つまり、He **は太字の行の意味ですか?

クロスオリジンHTTPリクエストにはOriginヘッダーがあります。このヘッダーは、サーバーにリクエストのオリジンを提供します。このヘッダーはブラウザによって保護されており、アプリケーションコードから変更することはできません。本質的に、これはクロスドキュメントメッセージングで使用されるメッセージイベントで見つかったOriginプロパティに相当するネットワークです。 Originヘッダーは、リファラーがパスを含む完全なURLであるという点で、古いリファラー[sic]ヘッダーと異なります。パスには機密情報が含まれている可能性があるため、リファラーはユーザーのプライバシーを保護しようとするブラウザーから送信されないことがあります。 ただし、ブラウザーは、必要な場合に必要なOriginヘッダーを常に送信します

29
Royi Namir

Originヘッダー

このヘッダーが追加されると?

ヘッダーのステージ中、ドキュメントの本文が送信される前(openの後、sendの前)。

ブラウザ(CORSをサポートする)がリクエストを行っているときに追加されますか? (クロスドメインまたは非クロスドメイン?)

Originは、XMLHttpRequestの作成元のページと一致しないときに追加されますが、same-Originリクエストで送信することもできます。

または、リクエストのターゲットOriginが現在のOriginと異なることをブラウザが「認識」したときに自動的に追加されますか...

はい。

ただし、必要に応じて、ブラウザーは必要なOriginヘッダーを常に送信します。

これはXMLHttpRequest仕様の一部です。クロスドメインリクエストを行う場合、リクエストヘッダーに追加のヘッダーが送信されます。このヘッダーは、たとえばOrigin: http://www.stackoverflow.comであり、ユーザーの操作なしで標準に準拠したブラウザによって追加されます。


仕様の詳細については MozillaWikiのセキュリティセクション [〜#〜] whatwg [〜#〜] および html5.org 。 FireFoxとGoogle Chromeによって実装されています(私は知っています)。まだW3Cの一部ではないと思います。さらにOriginヘッダーがtrueであると想定しないでください。変更されたブラウザまたは他のソフトウェアによって手動で設定できます。

45
Paul S.

Originヘッダーは、クロスドメインリクエストを行うと自動的に(通常)追加されます。

それをテストするために、このページでコンソールを開き、2つの異なるリクエストを作成しました。1つは別のドメイン用、もう1つは「/」用で、最初のリクエストにはOriginヘッダーが追加されました。

ところで、私はそれのためにJQueryを使用していますが、クロスブラウザで同じ動作をするためにもそれを使用することを本当にお勧めします。

主題に関する補足情報については、これをチェックしてください:

最初に注意することは、有効なCORSリクエストalwaysにはOriginヘッダーが含まれていることです。このOriginヘッダーはブラウザによって追加され、ユーザーが制御することはできません。このヘッダーの値は、リクエストの発信元のスキーム(httpなど)、ドメイン(bob.comなど)、およびポート(81などのデフォルトのポートでない場合にのみ含まれます)です。例: http://api.alice.com

Originヘッダーの存在は、リクエストがクロスオリジンリクエストであることを必ずしも意味しません。すべてのクロスオリジンリクエストにはオリジンヘッダーが含まれますが、同じオリジンリクエストの中にもオリジンヘッダーを持つものがあります。たとえば、Firefoxは同一生成元リクエストにOriginヘッダーを含めません。ただし、ChromeおよびSafariには、same-Origin POST/PUT/DELETEリクエストにOriginヘッダーが含まれます(同じOrigin GETリクエストにはOriginヘッダーがありません)。

ソース

9
Robyflc