使用Axios请求时出现Authorization请求头含无效字符报错如何解决?
报错原因
- 现有密钥验证逻辑错误:你使用的正则
/\t\r\n/.test()实际是校验字符串是否连续同时存在制表符、回车、换行三个字符,而非校验是否存在其中任意一种,验证结果完全不可靠,无法证明密钥没有空白控制字符。 - 密钥包含未覆盖校验的不可见字符:复制粘贴密钥时很容易带入零宽空格(\u200B)、零宽不连字符(\u200C)、不间断空格(\u00A0)、UTF-8 BOM头(\uFEFF)等隐藏控制字符,这些字符不在你当前的正则匹配范围内,但属于HTTP头禁止使用的非法字符。
- 低版本axios的header校验规则存在缺陷,会误判部分合规JWT字符串中的字符为非法字符。
- 拼接Authorization头时可能混入异常字符:比如
Bearer后的空格不是普通半角空格,或者拼接逻辑意外引入了其他符号。
修复方案
- 修正密钥校验逻辑,过滤所有非法控制字符:
将原有测试代码替换为以下内容,先确认是否存在非法字符,再直接过滤:
// 校验是否包含所有常见的非法控制字符 console.log(/[\x00-\x1F\x7F-\xA0\u200B-\u200D\uFEFF]/.test(api_config.API_KEY)); // 直接过滤所有非法控制字符 api_config.API_KEY = api_config.API_KEY.replace(/[\x00-\x1F\x7F-\xA0\u200B-\u200D\uFEFF]/g, '');
- 拼接Authorization头时主动去除密钥首尾空白:
修改header配置如下:
const connectionConfig = { headers: { 'Authorization': 'Bearer ' + api_config.API_KEY.trim() } }
- 若上述操作无效,尝试将axios升级到最新稳定版,排除版本自带的校验bug。
- 特殊场景下可以对Authorization头整体做URI转义处理:
headers: { 'Authorization': encodeURI('Bearer ' + api_config.API_KEY) }
内容的提问来源于stack exchange,提问作者Shawn Stensberg
相关产品推荐
相关产品推荐

