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」を許可しても機能しません。
これは不可能ですか?または、ステップがありませんか?