关于 HTTP 协议:
1. 浏览器往服务端发的叫 请求(request)
请求的消息格式:
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
请求数据
2. 服务端往浏览器发的叫 响应(response)
响应的消息格式:
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
响应正文 <-- html的内容
HTTP 请求响应步骤:
- 客户端连接到 Web 服务器
- 发送 http 请求
- 服务器接收请求并返回 http 响应
- 释放 tcp 连接
- 客户端浏览器解析 HTML 内容
- 一个 HTTP 客户端,与 Web 服务器的 http 端口建立一个 TCP 套接字连接
- 通过套接字,客户端向 Web 服务器发送一个文本的请求报文,一个请求报文由请求头部、空行和请求数据 4 部分组成
- Web 服务器解析请求,定位请求资源。服务器将资源副本写到 TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行就鞥相应数据 4 部分组成。
- 若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;若 connection 模式为 keeplive,则该链接会保持一段时间,该请求可以继续接受请求。
- 客户端浏览器首先解析状态行,查看表明请求是否成功的状态码。然后解析每一个响应头,响应头告知一下为若干字节的 HTML 文档和文档的字符集。客户端浏览器读物相应数据的 HTML,根据 HTML 语法对其进行格式化,并在浏览器庄口中显示。
Python Web 框架的本质:
a. 收发socket消息 --> 按照HTTP协议消息格式去解析消息
b. 路径和要执行的函数的对应关系 --> 主要的业务逻辑
c. 字符串替换 --> 模板(特殊符号 --> 数据)
一个完整得请求流程:
- 启动服务端,等待客户端(用户的浏览器)来连接
- 在浏览器地址栏输入 URL,与服务端建立连接,浏览器发送请求
- 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
- 执行函数,打开 HTML 文件,进行字符串替换,得到一个最终要返回的 HTML 内容
- 按照 HTTP 协议的消息格式要求,把 HTML 内容回复给用户浏览器(发送响应)
- 浏览器收到响应的消息之后,按照 HTML 的规则渲染页面.
- 关闭连接