我在前端设置加密的用户名和密码授权,并从服务器获取请求标头响应承载授权。在ajax中我正确地在safari中获得响应头但在chrome和firefox中它就像一个null。问题只在chrome和firefox中获取bearer token。如何解决这个问题?
Ajax代码,
$.ajax({
type:"POST",
url:url,
dataType: "json",
async:false,
headers:{
'Authorization':'Basic '+btoa(useremail+":"+password)
},
data:'{"datas"}',
success: function (data, status, request, xhr){
alert(request.getResponseHeader('Authorization'));
}
答案 0 :(得分:1)
请注意,自jQuery 1.8 async
选项不推荐使用。
至于为什么会发生这种情况:
在CORS请求期间,getResponseHeader()方法只能访问 简单的响应标头。简单响应头定义为 如下:
- 缓存控制
- 内容的语言
- 内容类型
- 到期
- 上次修改
- 附注
至于解决方案:
如果您希望客户端能够访问其他标头,您必须这样做 使用Access-Control-Expose-Headers标头。此标头的值 是您要公开的响应标头的逗号分隔列表 客户。
答案 1 :(得分:0)
尝试使用done
函数,如文章中的示例所示:
$.ajax({
type:"POST",
url:url,
dataType: "json",
async:false,
headers:{
'Authorization':'Basic '+btoa(useremail+":"+password)
},
data:'{"datas"}',
}).done(function (data, textStatus, xhr) {
console.log(xhr.getResponseHeader('Authorization'));
});
答案 2 :(得分:0)
试试这个..
var settings = {
"crossDomain": true,
"url": url,
"method": "POST",
"headers": {
"content-type": "application/x-www-form-urlencoded",
"Authorization":"Basic "+btoa(useremail+":"+password)
},
"data": {
"name": "name"
}
}
$.ajax(settings).done(function (data,status, xhr) {
console.log("Authorization=> "+xhr.getResponseHeader('Authorization'));
});