Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery CORS从带有cookies的平面HTML文件发出的Ajax请求_Jquery_Ajax_Json_Cross Domain_Cors - Fatal编程技术网

Jquery CORS从带有cookies的平面HTML文件发出的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) {

我试图创建一个独立的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)
    {
        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