次の jQuery のブロブを使用して、WCF Ajax 対応の Web サービスにリクエストを発行しています
サイト自体は でホストされlocalhost:80
、WCF サービスは でホストされていますlocalhost:8080
$.ajax({
type: "POST",
url: String.format(Service, Method),
contentType: "application/json; charset=utf-8",
data: JSON.stringify(Data),
timeout: 6000,
dataType: "json",
success: function (e) { OnSuccess(e); },
error: function (e) { OnFailed(e); }
});
これは IE では正常に動作しますが、Chrome または Firefox でこのコードを実行しようとすると (ユーザーが認証された後でも) エラーが発生しますHTTP/1.1 401 Unauthorized
。フィドラーを実行した後、フォーム認証用に構成したCookie .ASPXFORMSAUTHをクロムが送信していないため、その理由は明らかです。
具体的には、これはIEリクエストがどのように見えるかです
POST /SchedulerService.svc/GetAllEventsByCurrentUser HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=utf-8
Referer: http://localhost/Calendar/Calendar.aspx
Accept-Language: en-AU
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Connection: Keep-Alive
Content-Length: 0
DNT: 1
Host: localhost:8080
Pragma: no-cache
Cookie: ASP.NET_SessionId=dmz5jv3oxa0llsph0thh1443; .ASPXFORMSAUTH=5EA7CB8124C5077933A639062999A89D35D440C6AD1A038C83A42D34694C20886506721D3CCD899BDA7B705CEF3B3024368AD6AE4523DEBDC5891E8DDD478206A3C2EF852345F70812F01D30F8F1041C2113EA2836CC5353FEAF81FC3EBF4DB6921D6DB270DE5C4102321DDD4D3923082B890995195990088749A1815B6A0BE5
VSクローム
POST /SchedulerService.svc/GetAllEventsByCurrentUser HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Content-Type: application/json; charset=utf-8
Referer: http://localhost/Calendar/Calendar.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-AU,en;q=0.8,en-US;q=0.6,en-GB;q=0.4
何が問題なのかについて誰かがガイダンスを提供できますか? もっと情報を提供する必要があるかもしれませんが、他に何が関連しているのかわかりません。
編集: 非常に多くの異なるアイデアを試した結果、私の問題はすべて、IE、Chrome、および Firefox 間の同じオリジン ポリシーの実装の劇的な違いに起因する可能性が高いようです。増えたら更新します…