25

次のエラー メッセージが表示されます。 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()...

なんで?

4

3 に答える 3

22

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

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

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

于 2012-06-25T02:39:19.180 に答える
15

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

Access-Control-Allow-Origin: *

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

http://localhost:port/myappname

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

http://mymachinename:port/myappname

また

http://mymachinealias:port/myappname

詳細については、仕様を確認してください。

于 2014-07-21T06:56:27.683 に答える
-8

クロスドメインで作業していますか?

Brian S ソリューションを試すか、これを試してください。

localhost に設定する代わりに、何かを渡すだけで...何が起こるかを確認してください。

receiveReq.setRequestHeader("Origin", "*");
于 2012-07-31T17:36:03.000 に答える