2

CORS を介して RESTful JSON サービスにクロスドメイン要求を行うスタンドアロンの HTML ファイルを作成しようとしています。

私のjQuery ajaxリクエスト:

var query = $.ajax(
{
    type: 'GET',
    url: 'http://localhost:8626/Home/About',
    contentType: 'application/json',
    dataType: 'json',
    success: function (response)
    {
        alert('success');
        alert(query.getAllResponseHeaders());
        alert($.cookie('SessionID'));
    },
    error: function (x, e)
    {
        alert('error ' + e);
    }
});

(ASP MVC3) サーバー側で Access-Control-etc ヘッダーを設定します。

public ActionResult About()
{
    Response.AddHeader("Access-Control-Allow-Origin", "*");

    Response.AddHeader("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE");

    Response.AddHeader("Access-Control-Allow-Headers", "Content-Type");

    Response.SetCookie(new HttpCookie("SessionID", "1234"));

    return Json(new { name = "John" }, JsonRequestBehavior.AllowGet);
}

クッキーを除いて、すべてがうまく機能します。応答の JSON データを適切に取得します。

しかし、サーバーからクッキーも送り返しています。Set-Cookie としてヘッダーに表示されず、cookie コレクションにも表示されません。ここで、クロスドメイン リクエストで Cookie を取得するには、$.ajax 呼び出しで次のように設定する必要があることを読みました。

xhrFields:
{
    withCredentials: true
},

これを追加すると、呼び出しが機能しなくなり、JS エラーが発生します。

Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.

明らかに、私の Access-Control-Allow-Origin ヘッダーが「*」であることに不満を抱いています。

これはフラットなスタンドアロンの HTML ファイル (HTTP サーバーからではなく、ディスクから供給される) であるため、Chrome は「null」に等しい Origin ヘッダーを渡します。この値をオーバーライドできないようです。カスタムの Origin ヘッダーを追加すると、Chrome はそれを無視するようです。

Access-Control-Allow-Origin = "null" (リクエストの Origin ヘッダー値と一致) を返すと、次の JS エラーが発生します。

Origin null is not allowed by Access-Control-Allow-Origin.

だから私は何をすべきかわかりません。ワイルドカードを使用して Cookie を取得できず、代わりに「null」を許可しても機能しません。

これは不可能ですか?または、ステップがありませんか?

4

2 に答える 2

1

サーバーは、このヘッダーを使用して資格情報を許可する必要があります。

Access-Control-Allow-Credentials: true

https://developer.mozilla.org/En/HTTP_access_control#Access-Control-Allow-Credentials

于 2012-06-26T17:30:53.487 に答える
0

ページをオンサイトに配置し、ネットワーク経由でアクセスしてみてください (ローカル Web サーバーにマウントできます)。

Chrome でテストしたいだけの場合は、Chrome の起動フラグという名前があり--disable-web-securityます。

このリンクは、パラメータを使用して Chrome を起動する方法に関するものです: http://www.chromium.org/developers/how-tos/run-chromium-with-flags

于 2012-06-24T14:06:03.667 に答える