我有一个有效的跨域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
公开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
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
,行为仍然存在。
答案 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