我試圖製作一個獨立的HTML文件,通過CORS向RESTful JSON服務發出跨域請求。CORS使用Cookie的平面HTML文件發出的Ajax請求
我的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)服務器端:
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數據。
但我也從服務器發回一個cookie。它不會在標題中顯示爲Set-Cookie,並且不會顯示在Cookie集合中。我已閱讀here,要得到餅乾在跨域請求,您需要設置在$就調用以下:
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顯然無視它。
如果我回到訪問控制允許來源=「空」(從請求起源頭值匹配),我得到JS錯誤:
Origin null is not allowed by Access-Control-Allow-Origin.
所以我不知道該怎麼做。我無法使用通配符獲得我的cookie,並且允許「null」而不起作用。
這不可能嗎?還是我錯過了一個步驟?