HTTP框架修炼之道课程笔记 | 青训营

94 阅读2分钟

一、再谈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模式,处于等待时候的线程资源可以释放出来处理其他请求

三、企业实践

  • 追求性能
  • 追求易用,减少误用
  • 打通内部生态
  • 文档建设、用户群建设