web-dev-qa-db-ja.com

GoogleのxmlHttpRequestを使用するときに安全でないヘッダー「Origin」を設定することを拒否Chrome

このエラーメッセージが表示されました:_Refused to set unsafe header "Origin"_

このコードを使用する:

_   function getResponse() {
            document.getElementById("_receivedMsgLabel").innerHTML += "getResponse() called.<br/>";
            if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
                receiveReq.open("GET", "http://L45723:1802", true, "server", "server123");  //must use L45723:1802 at work.
                receiveReq.onreadystatechange = handleReceiveMessage;
                receiveReq.setRequestHeader("Origin", "http://localhost/");
                receiveReq.setRequestHeader("Access-Control-Request-Origin", "http://localhost");
                receiveReq.timeout = 0;
                var currentDate = new Date();
                var sendMessage = JSON.stringify({
                    SendTimestamp: currentDate,
                    Message: "Message 1",
                    Browser: navigator.appName
                });
                receiveReq.send(sendMessage);

            }
        }
_

何が悪いのですか?このCORSリクエストを機能させるためにヘッダーに何が欠けていますか?

receiveReq.setRequestHeader("Origin", ...)呼び出しを削除しようとしましたが、Google ChromeがreceiveReq.open()呼び出しでアクセスエラーをスローします...

どうして?

19
Derrick LAU

CORSを含むajaxリクエストにjqueryを使用しているため、これは単なる推測です。

ブラウザはあなたではなくヘッダーを設定することになっていると思います。ヘッダーを設定できた場合、セキュリティ機能の目的に反することになります。

これらのヘッダーを設定せずにリクエストを試し、ブラウザがそれらを設定しているかどうかを確認してください。

14
Brian S

CORSでは、呼び出しコードは特別な構成を行う必要はありません。すべてはブラウザで処理する必要があります。リクエストを許可するかどうかを決定するのはサーバーの仕事です。したがって、SOPポリシーに違反するリクエストを作成するときは常に、ブラウザはCORSリクエストを作成しようとします(Originヘッダーが自動的に追加され、場合によってはプリフライトリクエストが作成されます)安全でないヘッダー/メソッド/コンテンツタイプを使用しています。サーバーがCORSをサポートしている場合、サーバーは適切に応答し、次のようなCORS固有の応答ヘッダーを提供することで要求を許可/拒否します。

Access-Control-Allow-Origin: *

Chromeは「localhost」のホスト名に関して非常に制限的です(少なくとも私が使用していたときのことです)。代わりに、コンピュータ名を使用するか、「ホスト」に別のエイリアスを割り当ててください'ファイルです。たとえば、次のようにサイトにアクセスしないでください。

http://localhost:port/myappname

代わりに次を使用します:

http://mymachinename:port/myappname

または

http://mymachinealias:port/myappname

詳しくは 仕様 をご覧ください。

9
MeTTeO