You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何配置axios请求携带Cookie转发至本地服务

问题根因
  • withCredentials 配置仅对浏览器环境的XHR/ Fetch请求生效:Node.js服务端运行的axios不存在浏览器的Cookie沙箱环境,和浏览器发往3000端口的请求上下文完全隔离,开启该参数不会自动读取、透传当前Express接口收到的Cookie内容。Node环境下该参数仅用于控制axios自身维护的CookieJar是否自动携带对应域名的Cookie,和当前请求上下文无关。
  • 2999端口的Express服务未引入cookie-parser中间件:即使请求携带了Cookie头,也无法自动解析到req.cookies字段,直接打印该字段会一直返回空对象。
  • 服务端间的请求不会触发浏览器CORS校验,你当前配置的CORS规则对本次axios转发场景不生效。
修复方案

按以下步骤调整代码即可:

  1. 两个Express服务都安装并启用cookie-parser中间件
    先安装依赖:
    npm i cookie-parser
    
    在两个服务的路由注册前,添加中间件引用:
    const cookieParser = require('cookie-parser')
    // 注意要在所有路由注册前调用
    app.use(cookieParser())
    
  2. 3000端口服务的/request接口中,手动透传收到的Cookie头到axios请求中,删除无效的withCredentials配置:
    app.get('/request', async (req: Request, res: Response) => {
      console.log(req.cookies)
      console.log(req.headers.cookie)
      let url = 'http://localhost:2999'
      try {
        const result = await axios.get(url, {
          headers: {
            // 手动透传上游请求的Cookie头
            Cookie: req.headers.cookie
          }
        })
        console.log(result.headers)
      }
      catch (error) {
        console.log(error)
      }
      res.send(true)
    })
    
  3. (可选)如果后续有浏览器直接请求2999端口服务的需求,修正CORS配置的origin值为实际来源地址(带端口):
    app.use(cors({
      credentials: true,
      origin: "http://localhost:3000", // 补全端口号,匹配实际前端/3000服务的访问地址
      allowedHeaders: [
        'Content-Type',
        'Authorization',
      ],
    }));
    
验证流程

修改完成后重启两个服务:

  • 先访问http://localhost:3000/setcookie完成Cookie写入
  • 再访问http://localhost:3000/request触发转发逻辑
  • 查看2999端口服务的控制台输出,即可看到正常打印的Cookie请求头和解析后的req.cookies字段内容

内容的提问来源于stack exchange,提问作者user2625247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:09:21