HTTP请求处理过程(及中间件)
从点击一个 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
进行 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
客户端接收 “响应报文”
客户端解析 “响应报文”
客户端进行页面渲染
浙公网安备 33010602011771号