【问题标题】:Read Authorization header from response从响应中读取授权标头
【发布时间】:2017-10-17 08:46:14
【问题描述】:

我正在处理一个我想重用现有 API 的副项目。 API 有一个 /auth 端点,它处理 POST 请求,并在请求正文中期望 emailpassword。如果验证了emailpassword,则服务器返回包含Authorization 标头的响应,该标头包含应在所有后续请求中发送的令牌的值。

我在从响应中检索此标头时遇到问题。它在 Postman 和 Chrome 开发工具(网络部分)中都可见。 Chrome 开发工具: console.log 的响应头

我已经尝试了多个库/实现来发送请求(superagentrequestfetch 实现甚至XMLHttpRequest),但是,我得到的所有响应在响应中都有Authorization 标头当我在 Chrome 开发工具中查看标头时,但当我尝试从 javascript 访问标头时,我总是最终只获得 Content-Type 标头。

我在其他几个答案中读到,服务器必须在标头中指定 Access-Control-Expose-HeadersAccess-Control-Allow-HeadersAuthorization 值,但是,我无权访问服务器并且没有任何问题与此问题相关的 API,所以我的猜测是我在发送请求时遗漏了一些东西。

有什么想法吗?

这是使用fetch的请求

return fetch(endpoint, {
    method: 'post',
    body: data,
    headers: {
      [API_KEY_HEADER]: apiKey
    }
  }).then(r => {
    console.log(r);
    console.log(r.headers)
  });

这是使用request的请求

r({
    url: endpoint,
    method: 'post',
    headers: {
      [API_KEY_HEADER]: apiKey
    }
  }).then(r => {
    console.log(r);
    console.log(r.headers);
  })

这里是普通的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));

【问题讨论】:

  • Authorization 是标准请求标头,而不是响应标头。请查看en.wikipedia.org/wiki/…
  • 顺便说一句,你能发布发送 POST 请求的代码吗?

标签: http request authorization fetch superagent


【解决方案1】:

2 年太晚了,但希望这可以帮助遇到同样问题的人:

正如@shaochuancs 所说,Authorization 标头在响应中不是标准的,因此服务器必须明确通知将其公开。为此,服务器必须添加以下标头:

Access-Control-Expose-Headers:授权

来源:https://www.yukei.net/2016/01/getting-response-headers-data-from-an-ajax-request-with-jquery/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2019-05-20
    • 2020-09-25
    • 2018-08-30
    相关资源
    最近更新 更多