X-Forwarded-For(XFF)是用来识别经过HTTP代理或负载均衡方式链接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最先引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案[1]中正式提出。负载均衡
当今多数缓存服务器的用户为大型ISP,为了经过缓存的方式来下降他们的外部带宽,他们经常经过鼓励或强制用户使用代理服务器来接入互联网。有些状况下,这些代理服务器是透明代理,用户甚至不知道本身正在使用代理上网。ui
若是没有XFF或者另一种类似的技术,全部经过代理服务器的链接只会显示代理服务器的IP地址,而非链接发起的原始IP地址,这样的代理服务器实际上充当了匿名服务提供者的角色,若是链接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增长。XFF的有效性依赖于代理服务器提供的链接原始IP地址的真实性,所以,XFF的有效使用应该保证代理服务器是可信的,好比能够经过建立可信服务器白名单的方式。url
目录
格式编辑
这一HTTP头通常格式以下:spa
- X-Forwarded-For: client1, proxy1, proxy2
其中的值经过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功经过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3多是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;经过proxy1的时候,client1被添加到XFF中,以后请求被发往proxy2;经过proxy2的时候,proxy1被添加到XFF中,以后请求被发往proxy3;经过proxy3时,proxy2被添加到XFF中,以后请求的的去向不明,若是proxy3不是请求终点,请求会被继续转发。代理
鉴于伪造这一字段很是容易,应该谨慎使用X-Forwarded-For字段。正常状况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这一般是一个比较可靠的信息来源。