chromeドメイン間ajaxリクエストを開始Origin null is not allowed by Access-Control-Allow-Originの解に遭遇

1262 ワード

Chromeブラウザでは、AJAXで異なるドメインのリソースを要求する場合、「Origin null is not allowed by Access-Control-Allow-Origin」というエラーが発生する可能性があります.
これは、新しいバージョンのブラウザでセキュリティポリシーが発生したためです.簡単に言えば、XMLHttpRequestリクエストのURLが現在のページと異なるドメインにある場合、ブラウザは応答httpヘッダにAccess-Control-Allow-Originアイテムがあるかどうかを検出し、この値が空または現在のページのドメインと一致しない場合、このエラーが報告されます.
1.解法
W 3 C規格にはCross Origin Resource Sharing(CORS)というものがある.
簡単に言えば、ターゲットリソースが返すhttpヘッダに「Access-Clontrol-Allow-Origin」項目が含まれている必要があり、その値格子は要求ソースページドメインに一致する必要がある.
のようにhttp://a.com/default.htmlページでajaxで取得http://b.com/demo.aspxページの内容は、httpヘッダのAccess-Clontrol-Allow-Originに応答して一致する必要があります.http://a.comを選択しないと、上記のエラーが発生します.
このhttpヘッダを追加する方法はいくつかあります.
1.1 Webサイトプログラムによる設定
例えばasp.Netで
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Response.Headers.Add("Access-Control-Allow-Origin", "http://a.com");
    }

1.2 httpサーバでの設定
IIS 6,7でWebサイトのプロパティを右クリックし、「Httpヘッダ」--「カスタムHttpヘッダ」--追加--
Httpヘッダ:Access-Control-Allow-Origin
Httpヘッダ値:*
1.3リバースプロキシサーバでの設定
ターゲットWebサイトでnginxなどの逆エージェントが使用されている場合は、set-headerコマンド設定を使用します.
add_header Access-Control-Allow-Origin http://a.com;
この3つの方法は、a.comサイトのページがajaxを通じてb.comサイトのコンテンツを取得できるようにすることができます.