今天在写unit test的时候,x-forwarded-for这个域结果不一致,输入是将所有的IP域都给计算了,而输出部分仅仅把一条HTTP连接里的x-forwarded-for域算一个
一个网页请求经过了HTTP代理服务器以后,看似无法获得访问者的真实IP,因为:TCP连接是在代理和web服务器之间,而并非用户和web服务器之间的;HTTP协议是第七层协议,不会把IP层的访问者的源IP信息也发送
所以在HTTP包头里插入了一个域,XFF,即X-Forwarded-For来保存用户的真实IP地址,尽管TCP连接时代理和web服务器之间建立,但web server依然可以通过解析包头读取X-Forwarded-For这个域而获得用户的真实IP
在HTTP里,格式一般如下:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
其中client1是最原始客户端的真实IP Addr,代理服务器每成功收到一个请求,就把请求的源IP地址添加到XFF这个域里,比如最先client1最先发出请求,XFF为空,经过proxy1的时候,client1就被添加到XFF这个域里,然后经过proxy2的时候,proxy1就接着后面被添加到XFF域中,如此连续下去
假如没有XFF这种方法,那么通过代理服务器的连接就只显示出代理服务器的IP地址,而无法得知原始的IP地址,这样得到的可能都是虚假服务提供者,对于恶意访问的检测和预防就比较困难,安全防范难度大