javascript fetch()发送小写标题键

0yg35tkg  于 2023-01-16  发布在  Java
关注(0)|答案(3)|浏览(168)

我正在编写一个用于Atom Electron的HTTP API库。它基于fetch。服务器不在我的控制范围之内,但它是用PHP编写的,我可以看到它以区分大小写的方式检查头。
我的代码是这样的:

const headers = new Headers();
headers.append('Authorization', `Bearer ${key}`);

const init = {
    method: 'GET',
    headers: headers 
} 

const req = new Request(baseUrl + '/items?format=json');
return fetch(req, init);

请求因403 FORBIDDEN错误而被拒绝。当我在Electron Newtork面板中查看请求时,请求标头存在,但Authorization已变为authorization
我知道fetch()只是遵循HTTP标准,但是有没有一种简单的方法可以让fetch()按照我提供的头来发送它们呢?

yptwkmov

yptwkmov1#

当前提取将toLowercase()所有头文件。(这里有一些关于可选禁用https://github.com/whatwg/fetch/issues/304的讨论)。
现在,您可能需要使用带有header选项的http://api.jquery.com/jquery.ajax/

pxiryf3j

pxiryf3j2#

火狐v110, chrome v108:
使用构造函数new Headers()创建头可以降低大小写,但是提供请求头作为普通对象会发送正确的大写Athorization: Bearer
所以与其说

fetch('api/end-point', {
  headers: new Headers(...)
})

我这样做:

fetch('api/end-point', {
  headers: {
    ...{other headers},
    Authorization: `Bearer ${token}`,
  }
})

未在其他环境中测试

ih99xse1

ih99xse13#

使用获取我自己和做类似的事情,我们做如下...

const GLOBALS = require('./Globals');
const HEADERS = {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
};
const resourceURL = '/some/endpoint'
const body = '';

var request = new Request(`${GLOBALS.API_ENDPOINT}${resourceURL}`, {
                        method: 'GET',
                        headers: new Headers(Object.assign(HEADERS, {'Authorization': `JWT ${token}`})),
                        body: body ? JSON.stringify(body) : null
                    }); 

return fetch(request)
    .then(res => consume)

Take是伪代码,因为我们传入了一些函数参数,这些参数是在模板文本中计算的。

相关问题