42

为了在我的 ASP.NET 应用程序中获取客户端 IP 地址,我使用了 X-Forwarded-For,并从列表中获取第一个 IP 地址(根据我找到的信息,有一个客户端,proxy1,proxy2 ..)。但是我最近听说最好从 X-Forwarded-IP 标头中获取这些信息,因为 X-Forwarded-For 中的客户端 IP 地址可以通过代理修改,有什么区别,我应该使用哪个地址?

4

2 回答 2

54

X-Forwarded-For是识别连接到来自 HTTP 代理、负载平衡器的Web服务器的用户的原始 IP 地址的传统方法。

X-Forwarded-IP是识别通过 HTTP 邮件服务连接到电子邮件服务器的用户的原始 IP 地址的传统方法。

于 2014-05-23T21:01:44.380 回答
17

X-Forwarded-For是一个非标准的标头,最初由 Squid 引入。它是一个特定于代理的标头,可帮助服务器识别确实通过代理的调用的原始请求者 - 因此显然请求路径上的任何代理都应该/将修改 X-Forwarded-For。如果请求路径上没有代理,则此标头甚至不应该在请求中。

因为这个标头是非标准的,所以不能保证你会得到它,而且它的处理方式在代理实现上可能会有所不同。您也不能保证它将包含正确的 IP。

自 2014 年以来,IETF 已批准代理的标准标头定义,称为“转发”,记录在此处https://www.rfc-editor.org/rfc/rfc7239应使用而不是 X-Forwarded 标头。如果您的请求由代理处理,您应该可靠地使用它来获取原始 IP。

通常,只有当您确定它们是通过代理找到您时,代理标头(Forwarded 或 X-Forwarded-For)才是获取客户端 IP 的正确方法。如果没有代理标头或没有可用值,则应默认使用 REMOTE_ADDR 服务器变量。

于 2017-01-24T08:19:25.643 回答