HTTP协议和框架简述|青训营

52 阅读2分钟

HTTP协议

定义server和browser是怎么样通讯的: 以什么样的规则来发送和接收消息

  • HTTP 1.0: Single connection (NON-persistent)
  • HTTP 1.1: persistent connections, additional headers
  • HTTP/2: Further Speed improvements
    • decrease latency
  • HTTP/3: Allow more parallelism in data loading (QUIC)
  • HTTPS: HTTP over TLS
    • Runs over TLS – transport layer security – instead of directly over the transport layer
    • Uses port 443 instead of port 80
    • Everything is encrypted (e.g., URLs), not just the payloads

Connections Type

定义如何发送多个pkt的方法

  • Non-persistent:
    • 每次在传pkt之前都要setup connection
    • setup → send one pkt → close → setup
    • requires 2 “response times” (one to initiate TCP connection and one for initial HTTP request) per object + file transmission time
  • Persistent:
    • setup → send pkt1 → receive pkt1 → send pkt2 …→close
    • 只需要setup一次connection
  • Persistent with pipelined:
    • 不等receive就直接send
    • setup → send pkt1 → send pkt2 …→close

HTTP框架

  • 提供合理的API:可读性和简单性
    • 冗余性,兼容性,可测性,可见性
  • 洋葱模型
    • 将核心逻辑和通用逻辑进行分离
    • 将request层层递进,再将response层层递出
      • 日志 → Metrics → Biz Handler
  • 中间件设计
    • 实现预处理和后处理,调用所需的函数来获取需要的信息
    • 为了避免用户不主动调用下一个处理函数,应当在任何场景下使用index保证递增
    • 出错了就Abort退出
  • 调用链
    • 不调用next:用于初始化逻辑且不需要在同一调用栈
    • 调用next:后处理逻辑或需要在同一调用栈上
  • 路由设计
    • 框架路由:为URL匹配对应的处理函数(Handler)
    • 可实现的方式
      • map字典
      • 前缀匹配数
    • 匹配http方法 → 路由映射表
      • Map, Method, (前缀树,头节点)
      • 外层map:根据method初步筛选
  • 协议层设计
    • 抽象出合适的接口

总结

综上所述,深入理解和合理设计HTTP协议以及相关框架是非常重要的,它们直接影响到互联网应用的性能、安全性和用户体验。同时,在设计框架时需要兼顾API的简单性和可读性,以便更好地满足用户需求。通过合理的中间件和洋葱模型,可以更好地组织代码和处理请求,增强框架的灵活性和可维护性。总体而言,HTTP协议和框架设计是开发高效、稳健的互联网应用的关键因素,值得我们深入学习和思考。