1. 程式人生 > >瀏覽器的一個請求從發送到返回都經歷了什麽

瀏覽器的一個請求從發送到返回都經歷了什麽

過程 通過 之間 get 設置 後臺 電平 head 標準

瀏覽器的一個請求從發送到返回都經歷了什麽,講的越詳細越好

1、先從網絡模型層面:

client (瀏覽器)與 server 通過 http 協議通訊,http 協議屬於應用層協議,http 基於 tcp 協議,所以 client 與 server 主要通過 socket 進行通訊;

而 tcp 屬於傳輸層協議、如果走 https 還需要會話層 TLS、SSL 等協議; 傳輸層之下網絡層,這裏主要是路由協議 OSPF 等進行路由轉發之類的。再向下數據鏈路層主要是 ARP、RARP 協議完成 IP 和 Mac 地址互解析,再向下到最底層物理層基本就是 IEEE 802.X 等協議進行數據比特流轉成高低電平的的一些定義等等;

當瀏覽器發出請求,首先進行數據封包,然後數據鏈路層解析 IP 與 mac 地址的映射,然後上層網路層進行路由查表路由,通過應用層 DNS 協議得到目標地址對應的 IP ,在這裏進行 n 跳的路由尋路;而傳輸層 tcp 協議可以說下比較經典的三次握手、四次分手的過程和狀態機,這裏放個圖可以作為參考:

2、應用層方面:

數據交換主要通過 http 協議, http 協議是無狀態協議,這裏可以談一談 post、get 的區別以及 RESTFul 接口設計,然後可以講服務器 server 模型 epoll、select 等,接著可以根據實際經驗講下 server 處理流程,比如我: server 這邊 Nginx 拿到請求,進行一些驗證,比如黑名單攔截之類的,然後 Nginx 直接處理靜態資源請求,其他請求 Nginx 轉發給後端服務器,這裏我用 uWSGI, 他們之間通過 uwsgi 協議通訊,uWSGI 拿到請求,可以進行一些邏輯, 驗證黑名單、判斷爬蟲等,根據 wsgi 標準,把拿到的 environs 參數扔給 Django ,Django 根據 wsgi 標準接收請求和 env, 然後開始 startresponse ,先跑 Django 相關後臺邏輯,Django 拿到請求執行 request middleware 內的相關邏輯,然後路由到相應 view 執行邏輯,出錯執行 exception middleware 相關邏輯,接著 response 前執行 response middleware 邏輯,最後通過 wsgi 標準構造 response, 拿到需要返回的東西,設置一些 headers,或者 cookies 之類的,最後 finishresponse 返回,再通過 uWSGI 給 Nginx ,Nginx 返回給瀏覽器。

瀏覽器的一個請求從發送到返回都經歷了什麽