HTTP篇 | 青训营

72 阅读3分钟

HTTP

HTTP协议

什么是HTTP协议

HTTP————超文本传输协议(Hypertext Transfer Protocol) 为什么需要协议

HTTP协议是使用URL(统一资源定位符)来定位和识别互联网上的资源,并定义了一组请求方法和响应状态码,用于在客户端和服务器之间交换数据。因此我们需要明确协议开始和结束的地方,以免找错位置。另外找对了位置之后,我们需要知道交换的数据信息是什么,是什么类型。而这一切,都是得力于HTTP协议的使用。

协议里所包含的内容: 请求行/状态行(包括方法名,URL,协议版本,状态码,状态码描述) 请求头/状态头(包含了关于请求的附加信息,如用户代理、内容类型、授权信息等。每个头部字段由一个字段名和对应的值组成,用冒号分隔。) 请求体/状态体(对于某些请求方法(如POST),请求体包含了客户端向服务器发送的实际数据)

请求流程: 业务层->服务治理层->路由层->协议编(解)码层->传输层

HTTP框架的设计与实现

API设计

这里首先介绍一下什么是API(因为本人之前只听过但并不了解) 定义:API是应用程序编程接口(Application Programming Interface)的缩写。它定义了软件组件之间的交互方式和通信协议。API可被用于不同的软件系统之间,允许它们共享和交换数据、功能和服务。我对于它的一个理解就是:网络购物平台,连接商家和买家,交换对应的信息。在这个过程中,它会规定怎样去购买,需要的指定操作。放到应用程序中,就是指定的请求参数,数据格式和响应的结果。

API设计需要保证具有可理解性、简单性、兼容性、可测性、可见性、冗余性。

中间件设计

设计需求:

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

实现的方式:

  1. 函数调用链
  2. 中间件类/对象

路由设计

  1. 静态路由设计形式---/a/b/c
  2. 参数路由设计形式---/a/:id/c 或者 /*all
  3. 路由修复设计形式---/a/b <-> /a/b/
  4. 冲突路由以及优先级设计---/a/b 或者 /:id/c
  5. 匹配HTTP方法---外层Map 根据method进行初步筛选
  6. 多处理函数添加---在每个节点上使用一个list 存储handler

如何查找路由?

  1. 查看源代码,找到路由定义。
  2. 查看框架或者库的文档。
  3. 使用命令行工具。

协议层设计

首先需要抽象出合适接口,其次需要在连接上读写数据。

网络层设计

常见的网络层主要有BIO,NIO。BIO是阻塞式I/O模型。在BIO模型下,当应用程序发起一个I/O操作(如网络读写)时,该操作会一直阻塞程序的执行,直到操作完成或发生超时。NIO是非阻塞式I/O模型。与BIO不同,NIO采用事件驱动的方式处理I/O操作。在NIO模型中,当应用程序发起一个I/O操作时,它会立即返回,而不会阻塞程序的执行。对于不同要求的网络层设计,我们应该选择合适的模型来实现。