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协议和框架设计是开发高效、稳健的互联网应用的关键因素,值得我们深入学习和思考。