要在我的ASP.NET应用程序中获取客户端IP地址,我使用了X-Forwarded-For,并从列表中获取第一个IP地址(根据我找到的信息,有一个客户端, proxy1,proxy2 ..)。但我最近听说最好从X-Forwarded-IP头获取此信息,因为X-Forwarded-For中的客户端IP地址可以通过代理修改,有什么区别,我应该使用哪个地址?
答案 0 :(得分:45)
X-Forwarded-For
是识别连接到来自HTTP代理,负载均衡器的 web 服务器的用户的原始IP地址的传统方法。
X-Forwarded-IP
是通过HTTP邮件服务识别连接到电子邮件服务器的用户的原始IP地址的传统方式。
答案 1 :(得分:11)
X-Forwarded-For 是一个非标准的标题,最初是由Squid引入的。它是一个特定于代理的头,它可以帮助服务器识别传递代理的调用的原始请求者 - 因此,请求路径上的任何代理都应该/将修改X-Forwarded-For。如果请求路径上没有代理,则此标头甚至不应在请求中。
由于此标头是非标准的,因此无法保证您将获得它,并且它的处理方式可能因代理实现而异。您无法保证它将包含适当的IP。
自2014年以来,IETF批准了代理的标准标头定义,称为“转发”,此处记录https://tools.ietf.org/html/rfc7239应该使用而不是X-Forwarded标头。如果您的请求由代理处理,那么您应该可靠地使用它来获取原始IP。
通常,代理标头(Forwarded或X-Forwarded-For)是您确定通过代理来到您的客户端IP 的正确方法。如果没有代理标头或没有可用值,则应默认使用REMOTE_ADDR服务器变量。