理解http请求头部的XFF代理字段

1,789 阅读1分钟

在巡检的时候,看到了一个http请求头中有x-forwarded-for字段和x-forwarded-host字段。经过了解,这两个字段的作用是这样的。

当客户端能够直接访问服务器的时候,产生的http包的头部的origin字段会写上客户端的域名,host字段会写上服务器的域名。对应的ip包的头部的源ip字段会写上客户端的ip地址,目的ip字段会写上服务器的ip地址。如下图所示: image.png

当客户端和服务器之间增加了一层反向代理nginx的话,那么客户端的请求是交给nginx服务器,再由nginx服务器转交给服务器。这个时候问题就发生了如下变化:

image.png 在一些大型的网站中,来自客户端的HTTP请求会经过反向代理服务器的转发,这时候,服务器收到的Remote Address地址就是反向代理服务器的地址。在这样的情况下,用户的真实IP地址将被丢失,因此有了HTTP扩展头部X-Forward-For。当反向代理服务器转发用户的HTTP请求时,需要将用户的真实IP地址写入到X-Forward-For中,以便后端服务能够使用。另外,由于X-Forward-For是可修改的,所以X-Forward-For中的地址在某种程度上不可信。

参考链接:HTTP 请求头中的 X-Forwarded-For(XFF)_义臻的博客-CSDN博客_xff头