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

时间:2015-07-20 16:37:05

标签: 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());
    }
});

唯一记录到控制台的是:

  

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

以下是Chrome针对OPTIONS和POST响应标头报告的内容,请注意我尝试通过Foo公开AuthorizationAcccess-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

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

有人能弄清楚为什么我只能在成功回调中访问Content-Type标题吗?

更新

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

1 个答案:

答案 0 :(得分:6)

您的回复标题中有一个拼写错误:

  

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

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

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

  

Foo:酒吧
  授权:custom_access_token = some_token
  内容类型:text / html;字符集= UTF-8

附录

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

  

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

请参阅Mozilla docs