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地址;

歡迎大家多多關注我,在下方評論區說出自己的見解。


分享到:


相關文章: