从点击一个 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
-
客户端接收 “响应报文”
-
客户端解析 “响应报文”
-
客户端进行页面渲染