Jquery CORS从带有cookies的平面HTML文件发出的Ajax请求
我试图创建一个独立的HTML文件,通过CORS向RESTful JSON服务发出跨域请求 我的jQuery ajax请求:Jquery CORS从带有cookies的平面HTML文件发出的Ajax请求,jquery,ajax,json,cross-domain,cors,Jquery,Ajax,Json,Cross Domain,Cors,我试图创建一个独立的HTML文件,通过CORS向RESTful JSON服务发出跨域请求 我的jQuery ajax请求: var query = $.ajax( { type: 'GET', url: 'http://localhost:8626/Home/About', contentType: 'application/json', dataType: 'json', success: function (response) {
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。它不会作为集Cookie显示在标题中,也不会显示在cookies集合中。我已经了解到,要在跨域请求中获取cookie,您需要在$.ajax调用中设置以下内容:
xhrFields:
{
withCredentials: true
},
当我添加此项时,调用不再工作,出现JS错误:
Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.
很明显,它抱怨我的访问控制允许源标题为“*”
由于这是一个平面的、独立的HTML文件(源于磁盘,而不是HTTP服务器),Chrome将传递一个等于“null”的原始标头。我似乎无法覆盖这个值——当我添加自定义源标题时,Chrome显然会忽略它
如果我返回Access Control Allow Origin=“null”(与请求中的Origin头值匹配),我将得到JS错误:
Origin null is not allowed by Access-Control-Allow-Origin.
所以我不知道该怎么办。我无法使用通配符获取cookie,而允许使用“null”也不起作用
这不可能吗?还是我遗漏了一个步骤?尝试将您的页面放在站点上并通过网络访问它(您可以将其装载到本地web服务器) 如果你只是想在Chrome上测试它,有一个Chrome启动标志叫做
——禁用web安全性
此链接介绍如何使用以下参数启动Chrome:
.您的服务器需要允许使用此标头的凭据
访问控制允许凭据:true