http-proxy-middleware是否始终随请求转发Cookie?配置作用疑问
关于http-proxy-middleware中changeOrigin的作用解答
核心结论
changeOrigin: true不是让Cookie随请求转发的直接原因,它的核心作用是修改请求头里的Host字段,让目标服务器收到的Host与target地址一致,避免部分服务器基于Host的校验拦截。- Cookie能被转发,是因为http-proxy-middleware默认会把原始请求的Cookie(及其他请求头)同步到代理请求中,这是代理的默认行为,和
changeOrigin无关。
详细解释
changeOrigin的真实作用
当设置changeOrigin: true时,代理服务器会将请求的Host头替换为目标服务器的域名(即你的gateway.url)。如果不设置,Host会保留原始请求的主机地址(比如前端服务器的域名)。不少后端服务器会校验Host合法性,此时changeOrigin就能解决这类拦截,但它和Cookie转发没有直接关联。Cookie转发的原因
http-proxy-middleware默认会复制原始请求的所有请求头(包括Cookie)到代理请求里,除非你在onProxyReq中主动删除或修改Cookie头。你的代码里未对Cookie做任何修改,所以原始请求的Cookie会被自动转发到目标API服务器。生效范围说明
changeOrigin对所有匹配该代理配置的请求生效,只要请求路径匹配/api/admin/user,都会被修改Host头。- Cookie转发的默认行为同样对所有经过代理的请求生效,除非你通过
headers配置或onProxyReq钩子手动干预。
你的代理配置说明
你的配置中,changeOrigin: true仅修正了Host头,Cookie转发是代理的默认行为。另外你在onProxyReq中添加的authorization头是额外的身份验证逻辑,与这两个机制互不冲突。
// routes app.use('/api/auth', require('./routes/openRoutes/authRoutes')); // api routes const proxyOptions = { target: gateway.url, // target host changeOrigin: true, onProxyReq: function onProxyReq(proxyReq, req, res) { // add custom header to request const id = req.user ? req.user.id : null; const token = jwt.sign({ data: id }, sessionSecret, { expiresIn: '1h' }); if (token) { proxyReq.setHeader('authorization', `Bearer ${token}`); } }, logLevel: 'debug', }; app.use('/api/admin/user', createProxyMiddleware(proxyOptions));
内容的提问来源于stack exchange,提问作者KAT
相关产品推荐
相关产品推荐

