HTTP2

62 阅读1分钟

HTTP 前端、客户端、后端通信协议

HTTP协议

是什么

hypertext transfer protocol 超文本 媒体资源

  • 开始 结束
  • 消息类型

有什么

  • 请求行 / 状态行
    • 方法名 GET HEAD
    • URL
    • 协议版本
    • 协议版本
    • 状态码
    • 状态码描述
  • 请求头 / 响应头
  • 请求体 / 响应体

请求流程

  • 业务层
  • 服务治理层 / 中间件层
  • 路由层
  • 协议编码层
  • 传输层

不足与展望

  • HTTP1
    • 队头阻塞
    • 传输效率低,不支持多路复用
    • 明文传输不安全
  • HTTP2
    • 多路复用
    • 头部压缩
    • 二进制协议
  • QUIC
    • 基于UDP实现
    • 解决队头阻塞
    • 加密减少握手次数
    • 支持快速启动

HTTP框架的设计与实现

分层设计

专注性、扩展性、复用性 高内聚 低耦合 易用性 高扩展性 应用层 application - context request response handler middleware - recovery circuitbreak timeout access-log route - add find route-time route-group codec - websocket http1 quic http2 transport - netpoll go-net

common - 公共逻辑

应用层设计

  • 提供合理的API
    • 可理解性 - 命名
    • 简单性
    • 有效性
    • 兼容性
    • 可测性
    • 可见性

中间件设计

  • 需求 配合handler实现一个完整的请求处理生命周期 拥有预处理逻辑与后处理逻辑 可以注册多中间件 对上层模块用户逻辑模块已用
  • 洋葱模型
    • 日志
      • metrics
        • biz handler
    • 日志处理 。。。

性能修炼

企业实践