http是应用层,ip是网络层,那么http请求报文头部的client ip是怎么获取到的呢?

小爱小爱笑


“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

OSI(Open System Interconnection,开放式系统互联)是国际标准化组织指定的计算机网络通信的基本框架,将网络通信分为七层,分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

如题,HTTP是应用层的协议,IP是网络层的协议,那么HTTP请求报文头部的client ip是怎样获取到的?

在上层准备数据之前,下层确实没有准备该层所对应的数据,但协议栈初始化已经完成,即下层参数是已经确认过的。简单说,HTTP往下的协议栈全部都由OS负责初始化并进行确认后,才会允许调用socket API去建立连接并发送数据,同时可以通过相应的API获得IP信息等下层参数,然后再带入HTTP数据中。

平常使用的HTTP协议中,客户端是不会发送client-ip头的,准确的说是X-Client-IP和X-Forwarded-For,分以下两种情况:

1、未部署反向代理

在没有部署反向代理的情况下,可以直接拿到TCP层中对方的IP;

2、部署反向代理

部署反向代理后,TCP连接已经经过一次,甚至多次中转了,服务器在TCP层只能获取反向代理的IP地址,无法获取客户端的真实IP。因此X-Client-IP和X-Forwarded-For这两个头由反向代理记录并添加,然后发送至后端服务器。后端通过这两个头解析到客户端真实IP地址;

欢迎大家多多关注我,在下方评论区说出自己的见解。


分享到:


相關文章: