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

Mis*_*pic 8 javascript jquery cors

我有一个有效的跨域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());
    }
});
Run Code Online (Sandbox Code Playgroud)

记录到控制台的唯一事情是:

Content-Type:application/json; 字符集= utf-8的

以下是Chrome针对OPTIONS和POST响应标头报告的内容,请注意我正在尝试公开Foo并Authorization通过Acccess-Control-Expose-Headers:

OPTIONS

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
Run Code Online (Sandbox Code Playgroud)

POST

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
Run Code Online (Sandbox Code Playgroud)

任何人都可以找出为什么我只能Content-Type在我的成功回调中访问标题?

更新

注意我重构了上面的使用XMLHttpRequest,行为仍然存在.

spe*_*bus 6

您的响应标头中有一个拼写错误:

Acccess-Control-Expose-Headers:Content-Type,Foo,Authorization

"访问"中有三个"c".我承认我也花了很长时间才注意到.

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

Foo:Bar
授权:custom_access_token = some_token
Content-Type:text/html; 字符集= utf-8的

附录

看到另一个答案是建议您使用withCredentials,如果由于某种原因您这样做,请记住Access-Control-Allow-Origin必须匹配Origin您的浏览器可能自己设置的请求标头,并且它不能是通配符.我把它放在这里以避免另一个可能的问题.

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

请参阅Mozilla文档