node-fetch调用API报错api key is not a legal HTTP header如何解决
报错产生原因
这个错误是node-fetch对HTTP请求头的合规性校验触发的,RFC7230规范明确要求HTTP头值不能包含ASCII控制字符(包括零宽空格、换行、回车、制表符等不可见字符),触发报错的常见场景如下:
- 从配置文件读取的
API_Key值包含不可见控制字符:多数是复制JWT密钥时意外带入了零宽空格、首尾换行/空格,或是JSON配置文件存储时给值多加了转义符、多余引号。 - 构造Authorization头时产生了不符合规范的字符:比如
Bearer和密钥之间多打了空格,或是密钥本身被意外转义。
修复方案
按优先级依次尝试以下操作即可解决:
- 先校验密钥原始值,在请求前加一行打印代码,确认值是否正常:
console.log('密钥原始值:', `|${api_config.API_Key}|`)
如果打印结果中|和密钥之间有空白,或是存在奇怪的乱码占位,直接修改配置文件清理多余字符即可。
2. 对密钥值做强制清洗,构造头时过滤所有控制字符+清理首尾空白:
'Authorization': "Bearer " + api_config.API_Key.trim().replace(/[\x00-\x1F\x7F-\x9F]/g, '')
- 可选优化:GET请求无请求体,不需要传
Content-type请求头,可以直接删掉减少冗余。
内容的提问来源于stack exchange,提问作者Shawn Stensberg
相关产品推荐
相关产品推荐

