应用层 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是非常有用的。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/126926908
今日推荐