HTTP协议初探|青训营笔记

88 阅读2分钟

相关概念

HTTP协议是什么

HTTP:超文本传输协议(Hypertext Transfer Protocol)

为什么需要协议

  • 需要明确边界
  • 需要明确能够携带什么信息(规定消息类型等)

截屏2023-06-10 20.13.42.png

HTTP协议示例

HTTP1.1是一个常用的版本

POST \sis HTTP\1.1
Who: Alex
Content-Type: text\plain
Host: 192.0.0.1:8888
Content: Length 28

Let's watch a movie together

大致结构:

截屏2023-06-10 20.35.47.png

常见Method:

  • GET : 请求一个指定资源的表达形式,使用GET的请求应该只被用于获取数据。
  • POST: 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
  • PUT: 用请求有效载荷替换目标资源的所有当前表示
  • DELETE: 删除指定资源
  • HEAD: 请求一个GET请求的响应相同的响应,但没有响应体
  • CONNECT: 建立一个到由目标资源标识的服务器的隧道
  • OPTIONS: 用于描述目标资源的通信选项
  • TRACE: 沿着到目标资源的路径执行一个消息环回测试
  • PATCH: 对资源应用部分修改

请求流程

截屏2023-06-10 20.26.02.png

不足与展望

HTTP1

  • 队头阻塞
  • 传输效率低
  • 明文传输不安全

HTTP2

  • 多路复用
  • 头部压缩
  • 二进制协议

QUIC

  • 基于UDP实现
  • 解决队头阻塞
  • 加密减少握手次数
  • 支持快速启动

框架设计

分层设计

分层设计时应当满足高内聚、低耦合、易复用、高扩展性等

一个实践:

截屏2023-06-10 20.49.57.png

这种分层设计与HTTP请求过程较为类似,符合一般逻辑

应用层设计

提供合理的API:

  • 可理解性:在命名时选择合理的接口名
  • 简单性

中间件设计

中间件需求:

  • 配合handler实现一个完整的请求处理生命周期
  • 拥有预处理逻辑和后处理逻辑
  • 可以注册多中间件
  • 对上层模块用户逻辑模块易用

洋葱模型

截屏2023-06-10 21.01.12.png

路由设计

框架路由实际上就是为URL匹配对应的处理函数

  • 静态路由:/a/b/c、/a/b/d
  • 参数路由:/a/:id/c、/*all
  • 路由修复:/a/b <=> /a/b/
  • 冲突路由以及优先级:/a/b、/:id/c
  • 匹配HTTP方法
  • 多处理函数:方便添加中间件

存储路由的数据结构:

截屏2023-06-10 21.13.13.png

协议层设计

抽象出合适的接口

网络层设计

两种网络模型:

  • BIO 举例:

截屏2023-06-10 21.18.51.png

  • NIO 举例:

截屏2023-06-10 21.20.11.png