【问题标题】:HTTP headers not getting sent with fetch()未使用 fetch() 发送 HTTP 标头
【发布时间】:2018-02-14 16:59:13
【问题描述】:

我正在尝试在我的应用上配置后端 API,这是发送请求的代码:

static async xhr(endpoint, args, method) {
  const url = `${API_SERVER}${endpoint}`;
  let formBody = [];
  for (let property in args) {
      let encodedKey = encodeURIComponent(property);
      let encodedValue = encodeURIComponent(args[property]);
      formBody.push(encodedKey + "=" + encodedValue);
  }
  formBody = formBody.join("&");
  let options = Object.assign({ method: method }, args ? { body: formBody } : null );
  try {
    let headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded',
    };
    accessToken = 'bdi8HD8js91jdoach7234h';
    if(accessToken != null)
        headers['Authorization'] = accessToken;
    options.headers = headers;
    return fetch(url, options).then( resp => {
        console.log(resp);
        let json = resp.json();
        if(resp.status >= 200 && resp.status < 300) {
            if (resp.ok) {
                return json
            }
        } else {
            return {};
        }
        return json.then(err => {throw err});
    });
  } catch (error) {
      return null;
  }
}

注意:我调试并发现标头已正确添加到选项变量中,但由于某种原因,服务器没有收到 Authorization 标头。

我使用Postman 发送具有完全相同标头的完全相同的请求,并且我通过它得到了正确的响应。我不知道出了什么问题,除非一开始就没有发送标头。

谁能告诉我我做错了什么?谢谢!

【问题讨论】:

  • 试试headers: new Headers({ 'Authorization': accessToken })

标签: javascript rest http-headers


【解决方案1】:

headers 选项必须是Headers 的实例。您可以将当前的 headers 对象转换为 Headers 实例,方法是将其传递给它的构造函数,如下所示:

const headers = new Headers({
    'Accept': 'application/json',
    'Content-Type': 'application/x-www-form-urlencoded',
});

请注意,我还将 let 替换为 const,因为不会重新分配该变量。

要更改标头或向该Headers 实例添加新标头,您可以使用set method。而不是headers['Authorization'] = accessToken 你会这样做......

headers.set('Authorization', accessToken)

【讨论】:

  • 好的,我尝试这样做,但它仍然无法正常工作,但后来我发现由于某种原因它会自动将“授权”转换为“授权”,并且在 API 端,它是无法将小写授权读取为“授权”,因此发生了错误。我已经修复了它,但是为什么它将“授权”转换为“授权”?
  • @KetanMalhotra 这是因为根据the specification,HTTP 标头不区分大小写。一些 web 框架有一个方法可以帮助你处理这个问题。例如 Express 有 Request.get,它返回匹配它的标头的值,不区分大小写ly
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 2018-10-09
  • 2018-01-17
  • 2017-06-01
  • 2018-02-21
  • 2012-01-09
  • 2017-02-04
  • 2014-09-20
相关资源
最近更新 更多