什么是X-Forwarded-For?
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。
如何通过 X-Forwarded-For来获得用户的真实ip
public String getRemoteIP(HttpServletRequest request)
{
if (request.getHeader("X-Forwarded-For") == null) /* 存在 X-Forwarded-For 吗? */
{
return request.getRemoteAddr(); /* 兼容已有程序 */
}
return request.getHeader("X-Forwarded-For"); /* 返回用户真实 IP, 如为多个 IP 时, 则取第一个 */
}
简单来说 使用request.getRemoteAddr(); 如果在用户启用了代理服务器的情况下 是无法获得真实的ip地址的
那么当使用负载均衡服务器的情况下 可以通过request.getHeader("X-Forwarded-For") 解析请求头来获得真实的ip地址