应用层 HTTP 代理服务器转发消息时的相关头部 请求头 X-Forwarded-For

在http消息传递过程当中会经过很多正向代理服务器和反向代理服务器,这些代理服务器在转发消息的时候会涉及到http的头部,下面将会介绍这些头部,包括由于存在这些代理服务器所以客户端和源服务器之前有许多的tcp连接,有一些http头部是将客户端实际的IP地址传递给服务器做相关用途。

客户端与源服务器间存在多个代理


可以看到客户端与源服务器存在很多代理,客户端每次经过四层传输层代理就会建立新的tcp连接,tcp源端的IP地址只是tcp连接中的地址,如果想基于客户端的IP做负载均衡或者做限速限流,通过tcp连接是拿不到的,因为只能拿到Gateway的地址,要怎么传递客户端的地址到原服务器?

 

问题:如何传递 IP 地址?


要怎么样传递客户端的IP地址到源服务器呢?可以通过http头部,这个头部叫做X-Forwarded-For用于传递IP。

如果用户在家里,它的IP地址是192.168.0.x,它通过运营商进行拨号上网,运营商给它提供的公网地址为115.204.33.1,然后经过一个正向代理,这个正向代理的地址是1.1.1.1,然后再经历一个cdn,假设这个cdn的地址是2.2.2.2,然后再到后面的反向代理,如果反向代理需要拿到用户的IP地址用作负载均衡的话,115.204.33.1是一个合适的IP地址,但是反向代理是直接从tcp连接当中拿到的地址是2.2.2.2,要怎么样拿到115.204.33.1呢?

头部X-Forwarded-For就可以用来传递IP地址,从正向代理出来的时候需要将115.204.33.1添加到X-Forwarded-For头部,cnd这里又经理了一次重建tcp连接,需要将正向代理当中的1.1.1.1也放到这里,所以反向代理可以通过X-Forwarded-For中的第一个拿到相应客户端的地址。

 

 

 消息的转发


代理服务器在做消息转发的时候还有一些header头部是可以控制相关内容的,比如Max-Forwards,这个头部是用来限制最多经历多少个代理服务器去转发我们的消息,以防止过长的代理服务器转发。

Via 头部
经过了哪些代理服务器,这些代理服务器名称是什么,版本是什么。
可以看到经历两个代理服务器

为了防止代理服务器去修改服务器发给客户端响应中的包体内容,http又引入了新的header字段,
Cache-Control:no-transform表示不允许中间的代理服务器修改响应的包体。
上面就是http请求历经重重的代理服务器之后再http header中能够反馈给我们信息,服务端获取到客户端的IP是非常有用的。

 

当然可以!X-Forwarded-For (XFF) 是 HTTP 请求头的一部分,用于标识客户端的原始 IP 地址。它主要用于通过代理服务器、负载均衡器或 CDN(内容分发网络)访问 Web 应用程序保留原始客户端的真实 IP 地址信息。 ### 核心含义 #### 1. **X-Forwarded-For 头的作用** 当你直接从浏览器访问网站,Web 服务器可以直接获取到你的真实 IP 地址。但是,在某些情况下,例如: - 用户通过代理服务器访问; - 流量经过负载均衡器分配; - 使用 CDN 缓存服务; 此,真正的客户端 IP 地址会被隐藏,取而代之的是最后一个中间节点(如代理或负载均衡器)的 IP 地址。为了恢复真实的客户端 IP 地址,HTTP 协议引入了 X-Forwarded-For 头部字段。 #### 2. **X-Forwarded-For 头的格式** 典型的 X-Forwarded-For 值是由逗号和空格分隔的一系列 IP 地址列表,最左边的第一个 IP 地址是最初的客户端 IP,后面的依次是从第一个接触到该请求的代理开始列出的所有中介设备的 IP 地址。 ``` X-Forwarded-For: client-ip, proxy1-ip, proxy2-ip ``` 其中: - `client-ip` 表示最初发起请求的用户的实际 IP 地址。 - `proxy1-ip`, `proxy2-ip` 等则是各个层级的代理服务器的 IP 地址。 #### 示例解析 假设有一个用户 A 访问某网站 B,期间流量经过两个代理 C 和 D,则最终到达网站 B 的 HTTP 请求可能会包含这样的头部: ```http GET /index.html HTTP/1.1 Host: www.example.com ... X-Forwarded-For: 192.0.2.1, 198.51.100.2, 203.0.113.4 ``` 在这个例子中, - `192.0.2.1` 就是用户 A 的真实 IP 地址。 - `198.51.100.2` 是第一层代理 C 的 IP 地址。 - `203.0.113.4` 则是第二层代理 D 的 IP 地址。 ### 实际应用 #### 1. 日志记录和分析 许多在线平台依赖于 X-Forwarded-For 来准确地收集并统计来自全球各地访客的信息。这对于优化用户体验、进行地理定位广告投放或是防范恶意行为非常重要。 #### 2. 安全性和认证机制 一些应用程序和服务会检查 X-Forwarded-For 字段来验证用户身份或者实施特定的安全策略。然而需要注意的是,由于任何人都可以在请求中添加任意值作为 X-Forwarded-For ,所以不能完全信任它的安全性,应当结合其他手段来进行全面的身份验证。 #### 3. 配合 CDN 和云服务商 大型互联网企业往往借助 CDNs 提供缓存加速服务,这些第三方提供商会自动将正确的 X-Forwarded-For 添加进每个传给源站服务器的请求里去,使得开发者能够方便快捷地取得用户的真正来源地址。 --- 总结来说,X-Forwarded-For 是一个非常有用的 HTTP 请求头,特别是在复杂网络架构下帮助我们更好地理解和追踪用户的行为数据。但它也存在潜在的风险点,因此在实际部署过程中应该谨慎处理。 --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值