HTTP header里的X-Real-IP和X-Forwarded-For的区别

2021-09-21大约5分钟

在HTTP的请求header里,我们经常可以看到类似这样的内容:

X-Real-IP: 54.85.132.155
X-Forwarded-For: 54.85.132.155, 199.27.72.25, 50.19.19.94
X-Forwarded-Port: 80
X-Forwarded-Proto: https

如果要取客户端的IP地址,如何取才对?

X-Forwarded-For (XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。如果想要获得最初发起请求的客户端的IP地址的话,那么 X-Forwarded-For 就派上了用场。通常它的格式类似这样:

X-Forwarded-For: client, proxy1, proxy2

X-Real-IP 通常是用来携带最初的客户端的IP,即使中间经过HTTP代理,那么这个值也不会被修改。

因此,当HTTP header里有*X-Real-IP 头的时候,我们可以用它的值来作为客户端的IP地址,如果没有这个header,那么可以选择用X-Forwarded-For *里的第一个IP地址作为客户端的IP地址。