Node.js环境下Axios发送POST请求未携带Cookie报401问题求助
问题根因与修复方案
核心错误
你调用axios.post时参数传递顺序不符合Axios的方法约定:
- GET请求的语法为
axios.get(url, 配置对象),因此你之前的GET请求写法是完全正确的 - POST请求的语法为
axios.post(url, 请求体数据, 配置对象),你错误将请求头、请求体数据都合并到了第二个参数(本该是请求体的位置),导致你定义的Cookie头根本没有被Axios识别生效,所以请求没有携带认证信息返回401。
代码修正
第一步:修复createInfo方法
你不需要手动对请求体做JSON序列化,Axios会根据你预设的Content-Type: application/json自动处理,修正后的代码如下:
const createInfo = async(cookieAuth, infoName) => { try { return await api.post('endpoint/a', // 第二个参数直接传请求体对象 { name: infoName }, // 第三个参数传配置对象,包含headers { headers: { Cookie: cookieAuth } } ) } catch (error) { console.log(error); } };
第二步(可选):修正Axios实例配置笔误
你初始化Axios实例时的请求头配置键名存在笔误,正确键名为headers而非header,建议修正避免后续其他配置不生效:
const api = axios.create({ baseURL: 'http://mylocalserver:myport/api/', // 修正为headers headers: { 'Content-type' : 'application/json', }, withCredentials: true, responseType: 'json' });
可选优化说明
如果你是在浏览器环境下使用,你已经在实例配置中开启了withCredentials: true,只要后端跨域配置符合要求(Access-Control-Allow-Credentials为true、Access-Control-Allow-Origin不能设置为通配符*),浏览器会自动携带会话Cookie,不需要你手动从set-cookie取出再拼装到请求头里,可以简化代码。
内容的提问来源于stack exchange,提问作者Henri
相关产品推荐
相关产品推荐

