HTTP
HTTP协议
什么是HTTP协议
HTTP————超文本传输协议(Hypertext Transfer Protocol) 为什么需要协议
HTTP协议是使用URL(统一资源定位符)来定位和识别互联网上的资源,并定义了一组请求方法和响应状态码,用于在客户端和服务器之间交换数据。因此我们需要明确协议开始和结束的地方,以免找错位置。另外找对了位置之后,我们需要知道交换的数据信息是什么,是什么类型。而这一切,都是得力于HTTP协议的使用。
协议里所包含的内容: 请求行/状态行(包括方法名,URL,协议版本,状态码,状态码描述) 请求头/状态头(包含了关于请求的附加信息,如用户代理、内容类型、授权信息等。每个头部字段由一个字段名和对应的值组成,用冒号分隔。) 请求体/状态体(对于某些请求方法(如POST),请求体包含了客户端向服务器发送的实际数据)
请求流程: 业务层->服务治理层->路由层->协议编(解)码层->传输层
HTTP框架的设计与实现
API设计
这里首先介绍一下什么是API(因为本人之前只听过但并不了解) 定义:API是应用程序编程接口(Application Programming Interface)的缩写。它定义了软件组件之间的交互方式和通信协议。API可被用于不同的软件系统之间,允许它们共享和交换数据、功能和服务。我对于它的一个理解就是:网络购物平台,连接商家和买家,交换对应的信息。在这个过程中,它会规定怎样去购买,需要的指定操作。放到应用程序中,就是指定的请求参数,数据格式和响应的结果。
API设计需要保证具有可理解性、简单性、兼容性、可测性、可见性、冗余性。
中间件设计
设计需求:
- 配合Handler实现一个完整的请求处理生命周期。
- 拥有预处理逻辑与后处理逻辑。
- 可以注册多中间件。
- 对上层模块用户逻辑模块易用。
实现的方式:
- 函数调用链
- 中间件类/对象
路由设计
- 静态路由设计形式---/a/b/c
- 参数路由设计形式---/a/:id/c 或者 /*all
- 路由修复设计形式---/a/b <-> /a/b/
- 冲突路由以及优先级设计---/a/b 或者 /:id/c
- 匹配HTTP方法---外层Map 根据method进行初步筛选
- 多处理函数添加---在每个节点上使用一个list 存储handler
如何查找路由?
- 查看源代码,找到路由定义。
- 查看框架或者库的文档。
- 使用命令行工具。
协议层设计
首先需要抽象出合适接口,其次需要在连接上读写数据。
网络层设计
常见的网络层主要有BIO,NIO。BIO是阻塞式I/O模型。在BIO模型下,当应用程序发起一个I/O操作(如网络读写)时,该操作会一直阻塞程序的执行,直到操作完成或发生超时。NIO是非阻塞式I/O模型。与BIO不同,NIO采用事件驱动的方式处理I/O操作。在NIO模型中,当应用程序发起一个I/O操作时,它会立即返回,而不会阻塞程序的执行。对于不同要求的网络层设计,我们应该选择合适的模型来实现。