莫语3033

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
客户端接收 “响应报文”

客户端解析 “响应报文”

客户端进行页面渲染

posted on 2021-04-29 17:32  莫语3033  阅读(283)  评论(0)    收藏  举报