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. 客户端进行页面渲染

原创文章 35 获赞 13 访问量 2356

猜你喜欢

转载自blog.csdn.net/Bankofli/article/details/104807352