HTTP协议 | 青训营笔记

44 阅读2分钟

HTTP协议

Hypertext Transfer Protocol

协议结构

请求响应
请求/响应行请求方法、URL、协议版本协议版本、状态码、描述
请求/响应头key:Value \r\nkey:Value \r\n
请求/响应体请求数据响应数据

请求流程

image.png

缺陷

HTTP1HTTP2QUIC
队头阻塞多路复用基于UDP
效率低头压缩解决队头阻塞
明文传输二进制协议加密减少握手次数
支持快速启动

HTTP框架设计

image.png

  • 分层设计(OSI七层模型,TCP/IP四层模型)
    • 专注性--->高内聚、低耦合
    • 扩展性--->高扩展
    • 复用性--->易服用
  • 提供合理的API
    • 易理解,简单

  • 中间件设计
    • 配合handler实现完整请求处理声明周期
    • 预处理/后处理逻辑
    • 可以注册多中间件
    • 对上层模块用户逻辑模块易用
    • 洋葱模型:核心逻辑和通用逻辑分离
  • 路由设计
    • 为URL匹配对应的处理函数
    • MAP
      • 初步根据method筛选
      • 确定方法后由前缀树匹配路由
  • 协议层设计
    • 抽象出合适的接口
    • 快速解析
      • 核心字段快速解析
        • 定位Header line边界
        • SIMD加速
      • 协议相关的headers快速解析
        • 首字母删除不可能的key
        • 解析value到独立字段
        • byte slice 管理header存储,方便复用
      • header key规范化
      • 热点资源池化
        • 减少内存分配、提高内存服用
        • 降低GC压力,提升性能
        • 额外的逻辑
        • 定位问题难度增加
  • 网络/传输层设计
    • BIO
      • 绑定一块缓冲区减少系统调用次数
      • 流式友好
      • 小包性能好
    • NIO
      • buffer池,分配足够大buffer
      • 中大包性能好
      • 时延低

此外,企业实践的框架设计时需要关注

  • 性能
    • 毫无疑问优化的核心目标之一
  • 易用,减少误用
    • 增强推广的核心
  • 打通内部生态
    • 易用性另一体现-->与其他组件好接通
    • 不能为了追求性能而过于独立
  • 文档建设、用户群建设
    • 减轻维护压力