走进Http协议 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
1. HTTP协议
HTTP:应用层网络协议,超文本传输协议(Hypertext Transfer Protocol) 格式:
1. 请求行(方法名 URL 协议版本)/状态行(协议版本 状态码 状态码描述)
2. 请求头/响应头
3. 请求体/响应体
应用层网络协议比较:
- HTTP1: 队头阻塞(基于TCP的顺序传输弊端)、传输效率低(无用信息多,不支持多路复用)、明文传输不安全
- HTTP2: 多路复用、头部压缩、二进制协议 拓展:
- websocket:全双工通信,服务端可主动向客户端发送信息
- QUIC: 基于UDP实现、解决队头阻塞、加密减少握手次数、支持快速启动
2. HTTP设计与实现
分层设计: 高内聚、低耦合、易复用、高扩展
HTTP应用层: Context、Request、Response、Handler
中间件设计:(1)配合Handler实现一个完整的请求处理生命周期(2)拥有预处理与后处理逻辑(3)可以注册多中间件(4)对上层用户逻辑模块提供支持
(eg:洋葱模型)在下图中,洋葱的每一层都表示一个用于实现不同的功能的独立中间件(如异常处理、缓存处理等)。每次请求都会从左侧开始一层层地经过每层的中间件,当进入到最里层的中间件之后,就会从最里层的中间件开始逐层返回。因此对于每层的中间件来说,在一个请求和响应周期中,都有两个时机点来添加不同的处理逻辑,即预处理和后处理部分。
框架路由设计:为URL匹配对应的处理函数(Handlers),基于前缀匹配树匹配路由
网络层设计:go net、BIO(同步阻塞IO)、用户管理buffer(针对网络库net的优化设计)