cve*_*nov 4 authorization http request fetch superagent
我正在做一个副项目,我想在其中重用现有的 API。API 有一个/auth端点,用于处理 POST 请求email并password在请求正文中期望和。如果email和password得到验证,则服务器返回一个响应,其中包含一个Authorization标头,该标头包含应在所有后续请求中发送的令牌的值。
我在从响应中检索此标头时遇到问题。它在 Postman 和 Chrome Dev Tools(网络部分)中都可见。
Chrome 开发工具:
console.log 响应头的

我已经尝试了多个库/实现来发送请求(superagent、request、fetch实现甚至XMLHttpRequest),但是,Authorization当我在 Chrome 开发工具中查看它们时,我得到的所有响应都在响应头中包含标头,但是当我尝试访问时来自javascript的标题,我总是最终Content-Type只得到标题。
我在其他几个答案中读到服务器必须在标头中指定Access-Control-Expose-HeadersorAccess-Control-Allow-Headers的Authorization值,但是,我无权访问服务器,并且 API 上没有与此问题相关的问题,所以我的猜测是发送请求时我遗漏了一些东西。
有任何想法吗?
这是使用的请求 fetch
return fetch(endpoint, {
method: 'post',
body: data,
headers: {
[API_KEY_HEADER]: apiKey
}
}).then(r => {
console.log(r);
console.log(r.headers)
});
Run Code Online (Sandbox Code Playgroud)
这是使用的请求 request
r({
url: endpoint,
method: 'post',
headers: {
[API_KEY_HEADER]: apiKey
}
}).then(r => {
console.log(r);
console.log(r.headers);
})
Run Code Online (Sandbox Code Playgroud)
这里很旧 XMLHttpRequest
const request = new XMLHttpRequest();
request.open('POST', endpoint);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader(API_KEY_HEADER, apiKey);
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
const body = {
'email': 'dummy@test.com',
'password': 'secret!'
};
request.send(JSON.stringify(body));
Run Code Online (Sandbox Code Playgroud)
小智 5
2 年太晚了,但希望这可以帮助遇到同样问题的人:
正如@shaochuancs 所说,响应中的 Authorization 标头不是标准的,因此服务器必须明确通知以公开它。为此,服务器必须添加以下标头:
Access-Control-Expose-Headers:授权
来源:https : //www.yukei.net/2016/01/getting-response-headers-data-from-an-ajax-request-with-jquery/