從點擊一個 URL 開始,到最終頁面顯示出來,經過的全部流程:
-
點擊 URL: http://abcde.com/xyz/kkk
-
DNS 解析: abcde.com -> 11.22.33.44
-
客戶端連接服務器,建立 TCP 網絡連接
- TCP: 全雙工連接 (雙向連接)
- 三次握手:
- client -> SYN -> server
- client <- ACK + SYN <- server
- client -> ACK -> server
-
客戶端構造 HTTP 的 “請求報文”
-
客戶端向服務器發送 “請求報文”
-
服務器的 HTTP Server 接收 “請求報文”
-
Django 通過 WSGI 接口將 “請求報文” 解析成 HttpRequest 請求對象
- WSGI 全稱: Web Server Gateway Interface
--------------------------------------------------> process_request
- WSGI 全稱: Web Server Gateway Interface
-
進行 URL 映射: 通過 URL 找到對應的 View 函數
--------------------------------------------------> process_view -
執行 View 函數,得到一個 HttpResponse 對象
- 獲取 request 參數
- 進行邏輯處理
- 使用 MySQL、Cache 進行數據存取
- 模板渲染
--------------------------------------------> process_template - 封裝 HttpResponse 對象,並返回
--------------------------------------------> process_exception
--------------------------------------------------> process_response
-
WSGI 模塊將 HttpResponse 對象封裝成 “響應報文”
-
HTTP Server 將 “響應報文” 發送給客戶端
-
HTTP Server 主動斷開與客戶端的 TCP 連接
- server -> FIN -> client
- server <- ACK <- client
----------------------> 給客戶端接收數據預留一些時間 - server <- FIN <- client
- server -> ACK -> client
-
客戶端接收 “響應報文”
-
客戶端解析 “響應報文”
-
客戶端進行頁面渲染