HTTP简介与框架 | 青训营

67 阅读2分钟

HTTP协议基础知识

HTTP协议是什么

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

为什么需要协议

因为在网线上传输的都是只包含0和1的数据流,需要一些规则才能让对方理解

包含内容:

  1. 明确的边界 --- 开始、结束
  2. 能够携带信息 --- 什么消息、消息类型

协议里有什么

  1. 请求行(方法名、URL、协议版本)/状态行(协议版本、状态码、状态码描述)
  2. 请求头/响应头:分为协议约定的和业务相关的
  3. 请求体/响应体

不足与展望

  1. HTTP1:基于TCP,所以会造成队头阻塞;传输效率低;不支持多路复用;明文传输不安全
  2. HTTP2: 可以多路复用;头部压缩;二进制协议,所以解析起来更高效;但是还会造成队头阻塞
  3. Quic:基于UDP实现,可以解决队头阻塞;加密减少握手次数;支持快速启动

HTTP协议框架设计

分层设计

分层设计可以使项目具有专注性、扩展性和复用性的特点

应用层设计

提供合理的API:可理解性、简单性、冗余性、兼容性、可测性、可见性

中间件层

需求

  1. 配合Handler实现一个完整的请求处理生命周期
  2. 拥有预处理与后处理逻辑
  3. 可以注册多中间件
  4. 对上层模块用户逻辑模块易用

适用场景:日志记录;性能统计;安全控制;事务处理;异常处理

通常使用洋葱模型

路由层

为URL匹配对应的处理函数(Handlers)

分为静态路由(/a/b/c、 /a/b/d)和参数路由(/a/:id/c、 /*all)

路由设计:

  1. map[string]handlers ———— 只能处理静态路由
  2. 前缀匹配树 ———— 都可以处理

协议层

抽象出合适的接口

传输层

BIO: block.io,如果没有足够数据,会卡住
NIO: 注册了一个监听器,当监听到有足够数据后,再进行一个唤醒

个人总结

通过对HTTP的深入学习,我了解到了分层的重要性。在对项目进行了分层之后,团队中的每个人可以聚焦在自己的那一层,不用担心其他层的运行。同时,分层可以使项目简单化,让项目更加容易上手。