前言
刚刚有个需求,如何获取访问者的真实IP,找到一个方法,可以通过请求头里的 X-Forwarded-For 字段来获取到。
然后就了解下 X-Forward- 的细节
细节
X-Forwarded- 是一个 HTTP 请求头部(HTTP request header),包含了客户端请求通过了哪些代理服务器(proxy server)或负载均衡器(load balancer)等中间设备,以及客户端的真实 IP 地址。在多层代理或负载均衡架构中,客户端发起的请求会先经过多个中间设备,如果不加区分,后端服务器接收到的请求都是来自于代理服务器或负载均衡器的 IP 地址,难以确定真实的客户端 IP 地址,因此 X-Forwarded- 请求头部的出现就是为了解决这个问题。常见的 X-Forwarded- 请求头部有以下几个:
X-Forwarded-For
: 包含了客户端的真实 IP 地址,可以逐级累加多个 IP 地址,以逗号分隔。
X-Forwarded-Host
: 包含了原始请求头部中的 Host 字段,可以帮助后端服务器识别请求的目标主机名。
X-Forwarded-Proto
: 包含了客户端的原始协议(HTTP 或 HTTPS),可以帮助后端服务器区分加密请求和非加密请求。
这些 X-Forwarded- 请求头部都是非标准的,但是被广泛应用于实际的网络环境中,可以帮助客户端和服务端更加准确地理解网络请求的来源和属性。