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,行为仍然存在.
您的响应标头中有一个拼写错误:
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文档