什么是 HTTP 请求头中的 X-Forwarded-For?

HTTP 请求头中的 X-Forwarded-For 是用于标识客户端的 IP 地址,尤其在通过代理服务器时。

网络协议 中等 HTTP 请求头 网络

X-Forwarded-For 是一个 HTTP 请求头字段,用于标识通过代理服务器或负载均衡器连接到 Web 服务器的客户端原始 IP 地址。其主要作用是在请求经过多次代理转发时保留客户端的真实来源。具体信息如下:

  1. 格式
    X-Forwarded-For: client, proxy1, proxy2
    
    • 最左侧 (client) 是最原始客户端的 IP 地址。
    • 每经过一层代理服务器,新代理会将接收请求的上一跳 IP 追加到右侧(逗号+空格分隔)。
    • 例如:若请求通过了三台代理服务器,格式为 X-Forwarded-For: client, proxy1, proxy2
  2. 使用场景
    • 反向代理或负载均衡:当 Web 服务器部署在代理后时,服务器可通过解析该头部左侧首个 IP 获取用户真实地址。
    • 透明代理网络:大型 ISP 通过添加此头让服务器识别用户原始 IP。
  3. 注意事项
    • 安全性风险:客户端可伪造该头部字段(例如添加虚假 IP)。
      伪代码示例(模拟伪造攻击):
      # 在伪造请求中手动设置头(以非安全方式)
      headers = {"X-Forwarded-For": "123.123.123.123"}
      response = requests.get(url, headers=headers)
      
    • 防护建议:在后端仅信任可信代理链(如内部 Nginx 配置):
      # Nginx 配置确保仅追加客户端真实地址
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      
  4. 其他相关头部
    • 常配合 X-Forwarded-Host(原始主机名)、X-Forwarded-Proto(原始协议)等头部使用。
      例如 HTTPS 请求经过代理时,可标记原始协议为 https