浅谈HTTP

72 阅读2分钟

HTTP协议是什么

HTTP超文本传输协议(Hypertext Transfer Protocol) 传统,只传输文本

图片.png

超文本:在 传统的基础上能传输更多的类型,如:视频,图片等资源,就叫超文本。

图片.png

  1. 为什么需要协议 需要明确的边界
  • 协议开始
  • 协议结束

能够携带信息

  • 什么信息
  • 信息类型

图片.png

HTTP的不足与展望

图片.png

HTTP的分层设计

应用层设计

  • 提供合理的API
  1. 可理解性:如ctx.getBody().
  2. 简单性:如 ctx.getRequest.Header.Peek(key).
  3. 冗余性
  4. 兼容性(可以在各种不同的环境中使用).
  5. 可测性(保证是可以测试的).
  6. 可见性

中间件层

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

洋葱模型

图片.png

  • 路由设计

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

  1. 静态路由:/a/b/c,/a/b/d
  2. 参数路由;/a/:id/c
  3. 路由修复:/a/b <->/a/b/
  4. 冲突路由以及优先级:/a/b、/:id/c
  5. 匹配HTTP方法
  6. 多出力函数:方便添加中间件
  7. ...
  • 如何做设计
  1. 明确需求:考虑清楚要解决什么问题,有哪些需求。
  2. 业界调研:业界都有哪些解决方案可供参考。
  3. 方案权衡:思考不同方案的取舍。
  4. 方案评审:相关人员对不同方案做评审。
  5. 确定开发:确定最适合的方案进行开发。
  • 协议层设计

抽象出合适的接口:

图片.png

  • 网络层设计
  1. BIO(阻塞IO):同步操作

  2. NIO(非阻塞IO):异步操作

图片.png

针对协议的优化

找到Header Line 边界:\r\n 先找到\n再看它前一个是不是\r

更快的算法:SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。