一、再谈HTTP协议
1.1 HTTP协议是什么
- HTTP:超文本传输协议(Hypertext Transfer Protocol)
- 超文本:意指图片、音频、视频等文本的扩展
- 协议:帮助我们明确传输信息的边界、类型等
1.2 协议里有什么
- 请求行 / 状态行:方法名、URL、协议版本 / 协议版本、状态码、状态码描述
- 请求头 / 响应头:定义协议、业务元数据
- 请求体 / 响应体:传输内容
1.3 请求流程
graph TD
业务层 --> 服务治理层/中间件层 --> 路由层 --> 协议编解码层 --> 传输层
1.4 不足与展望
HTTP 1:
- 队头阻塞
- 传输效率低
- 明文传输不安全
HTTP 2:
- 多路复用
- 头部压缩
- 二进制协议
QUIC:
- 基于UDP实现
- 解决队头传阻塞
- 加密减少握手次数
- 支持快速启动
二、HTTP框架的设计与实现
2.1 应用层设计
提供合理的API:
- 可理解性
- 简单性
- 减少冗余性
- 兼容性
- 可测性
- 可见性
2.2 中间件层设计
中间件需求:
- 配合Handler实现一个完整的请求处理生命周期
- 拥有预处理逻辑与后处理逻辑
- 可以注册多中间件
- 对上层模块用户逻辑模块易用
洋葱模型适用场景:
- 日志记录
- 性能统计
- 安全控制
- 事务处理
- 异常处理
2.3 路由层设计
框架路由的作用:为URL匹配对应的处理函数(Handlers)
- 静态路由:
map[string]handlers- 参数路由:前缀匹配树
- 路由修复
- 冲突路由以及优先级
- 匹配HTTP方法
- 多处理函数:方便添加中间件
2.4 协议层设计
抽象出合适的接口
2.5 网络层设计
- BIO :同步阻塞IO模式,数据的读取写入必须阻塞在一个线程内等待完成
- NIO :同步非阻塞IO模式,处于等待时候的线程资源可以释放出来处理其他请求
三、企业实践
- 追求性能
- 追求易用,减少误用
- 打通内部生态
- 文档建设、用户群建设