Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
Javascript 无法使用jQuery读取CORS请求的响应头_Javascript_Jquery_Cors - Fatal编程技术网

Javascript 无法使用jQuery读取CORS请求的响应头

Javascript 无法使用jQuery读取CORS请求的响应头,javascript,jquery,cors,Javascript,Jquery,Cors,我有一个正在工作的跨域web服务调用,可以从中获取有效负载,但我无法读取响应中的标题。Chrome可以在请求中显示标题,但在jQuery的成功处理程序中不可用 var data_obj = { "userName": "myUser", "password": "000000" } $.ajax({ type: "POST", url: 'https://localhost:8443/AuthService.svc/auth', contentType: "applic

我有一个正在工作的跨域web服务调用,可以从中获取有效负载,但我无法读取响应中的标题。Chrome可以在请求中显示标题,但在jQuery的成功处理程序中不可用

var data_obj = { "userName": "myUser", "password": "000000" }

$.ajax({
    type: "POST",
    url: 'https://localhost:8443/AuthService.svc/auth',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(data_obj),
    dataType: "json",
    success: function(data, textStatus, jqXHR) {
        console.log(jqXHR.getAllResponseHeaders());
    }
});
唯一记录到控制台的是:

内容类型:application/json;字符集=utf-8

以下是Chrome报告的选项和POST响应标题,请注意,我正试图通过
访问控制公开标题来公开
Foo
授权

选择权

职位

有人能理解为什么我只能在成功回调中访问
内容类型
标题吗

更新


注意:我重构了上述内容以使用
XMLHttpRequest
,该行为仍然存在。

您的响应标题中有一个输入错误:

访问控制公开标题:内容类型、Foo、授权

“访问”中有三个“c”。我承认我花了太长时间才注意到

虽然我没有Chrome(只有Firefox),但我尽可能地复制了您的请求,并修复了输入错误,返回了以下信息:

Foo:Bar
授权:自定义\u访问\u令牌=某些\u令牌
内容类型:text/html;字符集=utf-8

补遗 看到另一个答案是建议您使用带有凭据的
,如果您出于某种原因这样做,请记住
访问控制允许源站
必须与浏览器可能自行设置的
源站
请求头匹配,并且不能是通配符。我把这个放在这里是为了避免另一个可能的问题

origin参数指定可以访问资源的URI。浏览器必须强制执行此操作。对于没有凭据的请求,服务器可以将“*”指定为通配符,从而允许任何来源访问资源


请参见

我的选项和帖子回复都包括
访问控制允许来源:
如果这是您的意思。是的,我知道这是一种不好的做法:)是的,这是一个CORS请求,但为了清楚起见,我修改了我的标题。Doh-也修改了。用XMLHttpRequest确认了同样的行为。@hyphenbash我不确定在没有飞行前如何执行CORS请求。。。我的理解是,当浏览器检测到您提出跨域请求时,它会自动执行预飞行。我回答了,因为我认为这是问题所在。否则我不会浪费一个答案。
Acccess-Control-Expose-Headers:Content-Type, Foo, Authorization
Access-Control-Allow-Headers:Content-Type, Foo, Authorization
Access-Control-Allow-Methods:POST, PUT, DELETE
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Content-Length:0
Date:Mon, 20 Jul 2015 16:26:00 GMT
Foo:Bar
Acccess-Control-Expose-Headers:Content-Type, Foo, Authorization
Access-Control-Allow-Headers:Content-Type, Foo, Authorization
Access-Control-Allow-Origin:*
Authorization: custom_access_token = some_token
Content-Length:36
Content-Type:application/json; charset=utf-8
Date:Mon, 20 Jul 2015 16:26:00 GMT
Foo:Bar