REMOTE_ADDR、HTTP_X_FORWARDED_FOR 获取 IP 地址的区别详解

作者:vkvi 来源:ITPOW(原创) 日期:2010-12-25

REMOTE_ADDR 是离服务器“最近”的 IP。

  • 没有使用代理时,也就是客户端 IP。
  • 使用一层代理时,也就是代理的 IP。
  • 使用多层代理时,也就是最近一个(最靠近服务器)的代理的 IP。

HTTP_X_FORWARDED_FOR 是从客户端到 REMOTE_ADDR 前一个 IP。

  • 没有使用代理时,没有值。
  • 使用一层代理时,也就是客户端 IP。
  • 使用二层代理时,也就是“客户端IP,1层代理IP”,也就是相当于 IP 路径,中间用逗号隔开,注意不包括二层代理。
  • 使用三层代理时,也就是“客户端IP,1层代理IP,2层代理”,也就是相当于 IP 路径,中间用逗号隔开,注意不包括三层代理。
  • ……

注意:HTTP_X_FORWARDED_FOR 是 HTTP 头的一部分,就像 HTTP_REFERER 一样,是可以伪造的。这就造成一种情况,并没有使用代理,我们却认为使用了代理,而忽略了 REMOTE_ADDR 对应的是真实 IP。所以如果是做安全方面的记录,最好把 REMOTE_ADDR、HTTP_X_FORWARDED_FOR 二者的值都记录下来。

相关阅读

相关文章