Node.js发送POST请求始终返回401(未授权)错误求助
解决Node.js POST请求401未授权错误
核心问题分析
你的代码存在几个关键错误,直接导致了401未授权:
Base64编码逻辑错误
你在Buffer.from中错误地将第二个参数设为base64,这会让Node.js把username:password当作base64格式字符串解析,再重复转码一次,最终生成的授权字符串完全无效。不必要的
no-cors模式
Node.js环境不存在浏览器的跨域限制,设置mode: 'no-cors'会强制限制请求头发送,导致Authorization头被丢弃,服务器收不到授权信息。Content-Type可能不匹配
服务器大概率不接受text/html类型的POST请求体,需要根据接口要求调整Content-Type。
修正后的代码示例
// 正确的Basic Auth编码方式 const authString = Buffer.from('username:password').toString('base64'); const response = await fetch('你的目标URL', { method: 'POST', // 移除no-cors模式 headers: { // 根据服务器要求调整Content-Type,常用值:application/json / application/x-www-form-urlencoded "Content-Type": "application/json", "Authorization": `Basic ${authString}` }, // 按接口要求传入合法请求体,示例为JSON格式 body: JSON.stringify({}) }); // 验证请求结果 if (response.ok) { const data = await response.json(); console.log(data); } else { console.error('请求失败,状态码:', response.status); }
额外排查点
- 确认
username和password是服务器认可的有效凭据,无拼写错误或权限不足问题。 - 如果服务器要求Bearer Token而非Basic Auth,需调整Authorization头格式为
Bearer 你的令牌。 - 检查服务器是否有其他验证机制(如CSRF令牌),需在请求头或体中一并发送对应参数。
内容的提问来源于stack exchange,提问作者lo7su
相关产品推荐
相关产品推荐

