如何获取AJAX响应中的Authorization响应头?
你遇到的getResponseHeader('Authorization')返回null的情况,最常见的原因是跨域资源共享(CORS)的限制,不过也有其他可能性,我帮你逐个分析:
1. CORS暴露头限制(最可能的原因)
浏览器在处理跨域请求时,出于安全考虑,默认只会让前端访问「简单响应头」(比如Content-Type、Cache-Control、Last-Modified等)。像Authorization这类非简单头,必须由服务器明确通过Access-Control-Expose-Headers响应头指定允许暴露给前端,否则浏览器会隐藏这个头,导致你用getResponseHeader获取到null。
解决办法:
需要后端在响应中添加这个头:
Access-Control-Expose-Headers: Authorization
如果后端还需要暴露其他非简单头,可以用逗号分隔,比如:
Access-Control-Expose-Headers: Authorization, X-Custom-Header
2. 服务器未实际返回Authorization响应头
先确认服务器真的在响应里包含了Authorization头。你可以通过浏览器开发者工具验证:
- 按下F12打开开发者工具,切换到「Network」面板
- 找到你发送的这个POST请求,点击查看「Response Headers」部分
- 检查是否存在
Authorization字段
如果这里看不到这个头,那问题出在后端服务,需要调整后端逻辑,确保在响应中添加该头。
3. 拼写或大小写问题(可能性较低)
虽然getResponseHeader方法是不区分大小写的,但还是要确认你请求的头名称和服务器返回的完全一致(比如有没有把Authorization写成Authroization这类拼写错误)。不过从你的代码看,拼写是正确的,这个可能性比较小。
额外验证建议
你可以尝试用原生XMLHttpRequest替代jQuery AJAX测试,看看是否能获取到该头,排除jQuery封装的影响:
const xhr = new XMLHttpRequest(); xhr.open('POST', 'https://api.myapi.com/v1/post/', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function() { console.log(xhr.getAllResponseHeaders()); console.log(xhr.getResponseHeader('Authorization')); }; xhr.send(JSON.stringify(body));
如果原生XHR也无法获取,那基本可以确定是CORS或服务器端的问题。
内容的提问来源于stack exchange,提问作者Siddiqui Noor
相关产品推荐
相关产品推荐

