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

2024-01-19

我有一个有效的跨域 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 报告的 OPTIONS 和 POST 响应标头的内容,请注意,我正在尝试公开Foo and Authorization via 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

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我的成功回调中的标头?

Update

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


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

访问控制公开标头:内容类型、For、授权

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

虽然我没有 Chrome(只有 Firefox),但我尽可能准确地复制了您的请求,并修复了拼写错误,返回了以下内容:

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

Addendum

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

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

See the Mozilla 文档 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 jQuery 读取 CORS 请求的响应标头 的相关文章

随机推荐