HTTP请求头中表示代理IP地址的属性及获取情况
公众号:emanjusaka的编程栈
by emanjusaka from https://www.emanjusaka.top/2024/12/http-proxy-ip
本文为原创文章,可能会更新知识点以及修正文中的一些错误,全文转载请保留原文地址,避免产生因未即时修正导致的误导。
代理服务器类型
透明代理服务器(Transparent Proxies)
透明代理,也称为内联代理、拦截代理或强制代理,是一种位于最终用户或设备与互联网之间的服务器,可拦截所有请求和响应而不对其进行更改。
术语“透明”是指代理的操作对用户不可见;它不会修改请求或响应的内容,也不需要对用户的设备进行任何配置更改。这使得它不同于非透明代理,非透明代理可能需要在客户端设备上进行明确配置或修改通过它们的数据。
普通匿名代理服务器(Anonymous Proxies)
普通匿名代理同样可以隐藏用户的IP地址,但与高匿名代理相比不同的是普通匿名代理会改变用户的访问请求,这样的话站点服务器便有很大概率会识别出用户使用了代理。
匿名代理隐藏了您的真实IP,但是向访问对象可以检测是使用代理服务器访问他们的。会改变我们的请求信息,服务器端有可能会认为我们使用了代理。不过使用此种代理时,虽然被访问的网站不能知道你的ip地址,但仍然可以知道你在使用代理,当然某些能够侦测ip的网页也是可以查到你的ip。
欺骗性代理服务器(Distorting Proxies)
欺骗性代理是指代理服务器通过修改HTTP标头来掩盖客户端的IP地址,并向目标服务器呈现一个虚假的IP地址。
它通常用于增强隐私、添加匿名层并限制监视用户浏览活动的能力。
高匿名代理服务器(High Anonymity Proxies)
高匿名代理不改变客户机的请求,这样在服务器看来就像有个真正的客户浏览器在访问它,这时客户的真实IP是隐藏的,完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象,同时服务器端不会认为我们使用了代理。
请求头中表示代理 IP 地址的属性
REMOTE_ADDR
在没有使用代理服务器的情况下,REMOTE_ADDR
会显示用户的真实IP地址。
如果使用了代理服务器,REMOTE_ADDR
会显示最后一个代理服务器的IP地址。
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED_FOR
是一个 HTTP 请求头字段。它主要用于记录客户端的真实 IP 地址,在经过代理服务器或负载均衡器等中间设备转发请求时发挥重要作用。
HTTP_X_FORWARDED_FOR
主要是在服务器端代码中,当使用某些特定的服务器端编程语言或框架(比如在 PHP 中通过$_SERVER['HTTP_X_FORWARDED_FOR']
这种方式)去获取对应请求头信息时才会用到的名称。
也就是说,它是在服务器端内部代码层面针对X-Forwarded-For请求头进行读取操作时的一种转换后的、适配特定环境的命名。
HTTP_CLIENT_IP
HTTP_CLIENT_IP
是一个环境变量,它通常用于在服务器端获取发起 HTTP 请求的客户端的 IP 地址。
它并不是一个标准的 HTTP 请求头部(header),而是一个在服务器端环境中可能被设置的变量。
WL-Proxy-Client-IP
它用于表示通过 WebLogic Server(WL)代理的客户端的原始 IP 地址。
当客户端通过代理服务器访问 WebLogic 应用时,代理服务器会添加这个头部信息,以便应用服务器能够识别真正发起请求的客户端 IP 地址。
Proxy-Client-IP
Proxy-Client-IP
类似于 X-Real-IP
,也是一个非标准的 HTTP 请求头部(header),用于在 HTTP 请求通过代理服务器转发到后端服务器时,向后端服务器传递原始客户端的 IP 地址。
这个头部并不是 HTTP 协议标准的一部分,而是由某些代理服务器或负载均衡器自定义添加的,以便后端服务器能够识别出原始请求的发起者。
X-Real-IP
X-Real-IP
是一个 HTTP 请求头部(header),用于识别通过 HTTP 代理或负载均衡器转发到后端服务器的原始客户端 IP 地址。
与 X-Forwarded-For
不同,`X-Real-IP
通常只包含单个 IP 地址,即发起请求的客户端的真实 IP 地址。
对于支持 X-Forwarded-For
的代理服务器,它们通常会同时设置 X-Forwarded-For
和 X-Real-IP
头部。
在这种情况下,X-Forwarded-For
头部会包含完整的请求链中的 IP 地址列表,而 X-Real-IP
头部则只包含客户端的原始 IP 地址。这可以为后端服务器提供更多的上下文信息,以便进行更准确的访问控制和日志记录。
X-Forwarded-For
X-Forwarded-For
头部通常包含一个或多个 IP 地址,它们用逗号分隔。
第一个 IP 地址通常是发起请求的客户端的 IP 地址,随后的 IP 地址则代表请求所经过的代理或负载均衡器的 IP 地址。
例如,如果一个请求从客户端 IP 192.168.1.100 发出,并通过一个代理服务器 IP 192.168.2.1 转发到目标 web 服务器,那么 X-Forwarded-For
头部可能看起来像这样:
X-Forwarded-For: 192.168.1.100, 192.168.2.1
获取IP地址的几种情况
X-Forwarded-For 和 HTTP_X_FORWARDED_FOR的情况基本上是一样的。
如果有多级代理,HTTP_X_FORWARDED_FOR / X-Forwarded-For 会包含一个 IP 地址列表,从左到右依次表示:
最左边:客户端的真实 IP。
中间:经过的代理服务器的 IP。
最右边:直接向目标服务器发起请求的代理 IP。
没有使用代理服务器的情况
REMOTE_ADDR:真实 IP 地址
HTTP_VIA:空
HTTP_X_FORWARDED_FOR:空
REMOTE_ADDR: 192.168.1.100
HTTP_VIA:
HTTP_X_FORWARDED_FOR:
使用透明代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息
HTTP_X_FORWARDED_FOR:真实 IP 地址
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 192.168.1.100 (客户端的真实 IP 地址)
使用普通匿名代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息
HTTP_X_FORWARDED_FOR:客户端的真实 IP 地址,但代理服务器可能会将这部分信息隐藏或替换为一个通用的 IP 地址。
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 203.0.113.1 (代理服务器的 IP 地址)
使用欺骗性代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息,但可能经过修改以隐藏其真实身份。
HTTP_X_FORWARDED_FOR:可能包含一些毫无意义的或者伪造的 IP 信息,比如一个随机生成的 IP 地址9.9.9.9,这完全是为了误导目标服务器而设置的。
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 198.51.100.1 (伪造的 IP 地址)
使用高匿名代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息,但很难通过这个信息追踪到代理服务器的真实身份。
HTTP_X_FORWARDED_FOR:为空或者不包含用户真实 IP 相关线索。与透明代理不同,高匿名代理不会通过这个字段泄露用户的真实 IP。
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA:
HTTP_X_FORWARDED_FOR: