什么是 HTTP 请求头中的 X-Forwarded-For?
HTTP 请求头中的 X-Forwarded-For 是用于标识客户端的 IP 地址,尤其在通过代理服务器时。
X-Forwarded-For
是一个 HTTP 请求头字段,用于标识通过代理服务器或负载均衡器连接到 Web 服务器的客户端原始 IP 地址。其主要作用是在请求经过多次代理转发时保留客户端的真实来源。具体信息如下:
- 格式
X-Forwarded-For: client, proxy1, proxy2
- 最左侧 (
client
) 是最原始客户端的 IP 地址。 - 每经过一层代理服务器,新代理会将接收请求的上一跳 IP 追加到右侧(逗号+空格分隔)。
- 例如:若请求通过了三台代理服务器,格式为
X-Forwarded-For: client, proxy1, proxy2
。
- 最左侧 (
- 使用场景
- 反向代理或负载均衡:当 Web 服务器部署在代理后时,服务器可通过解析该头部左侧首个 IP 获取用户真实地址。
- 透明代理网络:大型 ISP 通过添加此头让服务器识别用户原始 IP。
- 注意事项
- 安全性风险:客户端可伪造该头部字段(例如添加虚假 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;
- 安全性风险:客户端可伪造该头部字段(例如添加虚假 IP)。
- 其他相关头部
- 常配合
X-Forwarded-Host
(原始主机名)、X-Forwarded-Proto
(原始协议)等头部使用。
例如 HTTPS 请求经过代理时,可标记原始协议为https
。
- 常配合