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

如何移除NodeJS https请求中的X-Forwarded-*系列请求头?

Node.js 原生https模块自动追加X-Forwarded-For头问题解决方案

核心认知纠正

原生 Node.js 内置的http/https模块默认不会主动添加X-Forwarded-For、X-Real-Ip两个请求头,你观测到的这两个头并非Node runtime本身注入。
唯一默认会添加的和你描述匹配的头是Connection: close,这个行为可以通过配置修改。

问题排查步骤

  • 先验证头的来源:在本地启动一个无任何代理配置的测试HTTP服务,用你写的Node脚本直接请求本地服务,打印收到的请求头,不会出现X-Forwarded-For和X-Real-Ip字段。
  • 检查运行环境:
    • 查看系统环境变量是否配置了HTTP_PROXY/HTTPS_PROXY/ALL_PROXY全局代理
    • 确认当前网络是否存在透明代理、企业网关、云服务商出口网关劫持,这类中间节点会自动给经过的请求追加代理相关的IP头

注:X-Forwarded-For、X-Real-Ip是代理场景的标准约定头,只有中间代理节点会追加,原生HTTP客户端默认不会携带这两个字段,和Python requests库的默认逻辑完全一致。你用requests测试时没出现该问题,通常是因为运行Python脚本的网络环境没有走对应透明代理。

代码层面调整方法

所有请求头都可以通过请求配置的headers字段显式指定,不需要的头显式赋值为undefined即可在发送时移除,默认头会被你配置的值覆盖:

const https = require('https');
const options = {
    hostname: 'example.com',
    port: 443,
    path: '/foo/bar',
    method: 'GET',
    headers: {
        // 覆盖默认的Connection: close配置
        'Connection': 'keep-alive',
        // 显式移除两个代理相关头
        'X-Forwarded-For': undefined,
        'X-Real-Ip': undefined
    }
}
const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`)
    res.on('data', d => {
        process.stdout.write(d)
    })
})
req.end()

透明代理场景的处理

如果排查后确认头是网络链路中的透明代理强制注入的,代码层面无法移除——代理对请求头的修改发生在请求离开你的设备之后,本地代码无法干预链路中间节点的行为。这种场景只能更换无透明代理的网络环境直连目标站点,或使用不会追加这类头的代理出口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:01:14