HTTP請求處理過程(及中間件)

從點擊一個 URL 開始,到最終頁面顯示出來,經過的全部流程:

  1. 點擊 URL: http://abcde.com/xyz/kkk

  2. DNS 解析: abcde.com -> 11.22.33.44

  3. 客戶端連接服務器,建立 TCP 網絡連接

    • TCP: 全雙工連接 (雙向連接)
    • 三次握手:
      1. client -> SYN -> server
      2. client <- ACK + SYN <- server
      3. client -> ACK -> server
  4. 客戶端構造 HTTP 的 “請求報文”

  5. 客戶端向服務器發送 “請求報文”

  6. 服務器的 HTTP Server 接收 “請求報文”

  7. Django 通過 WSGI 接口將 “請求報文” 解析成 HttpRequest 請求對象

    • WSGI 全稱: Web Server Gateway Interface
      --------------------------------------------------> process_request
  8. 進行 URL 映射: 通過 URL 找到對應的 View 函數
    --------------------------------------------------> process_view

  9. 執行 View 函數,得到一個 HttpResponse 對象

    • 獲取 request 參數
    • 進行邏輯處理
    • 使用 MySQL、Cache 進行數據存取
    • 模板渲染
      --------------------------------------------> process_template
    • 封裝 HttpResponse 對象,並返回
      --------------------------------------------> process_exception
      --------------------------------------------------> process_response
  10. WSGI 模塊將 HttpResponse 對象封裝成 “響應報文”

  11. HTTP Server 將 “響應報文” 發送給客戶端

  12. HTTP Server 主動斷開與客戶端的 TCP 連接

    1. server -> FIN -> client
    2. server <- ACK <- client
      ----------------------> 給客戶端接收數據預留一些時間
    3. server <- FIN <- client
    4. server -> ACK -> client
  13. 客戶端接收 “響應報文”

  14. 客戶端解析 “響應報文”

  15. 客戶端進行頁面渲染

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章