一、HTTP简介
什么是 HTTPS ?一句话
HTTPS = HTTP + SSL
HTTPS 并不是一个全新的协议,而是在 HTTP 的基础上,通过 SSL 增加了一层加密协议,从而大大增加了 HTTP 协议的安全性。 所以在正式了解 HTTPS 之前,我们需要先了解 HTTP。
HTTP
HTTP 全称 超文本传输协议(HyperText Transfer Protocol),是一种广泛用于互联网中浏览器与服务器之间的应用层传输协议。简单来说,浏览器向服务器发送 HTTP 请求,服务器向浏览器返回 HTTP 响应,两者之间通过这种方式进行“交流”,来使得我们的浏览器可以正常从服务器端获取数据,并展示在用户的电脑屏幕上
为什么需要协议?
一个创建的POST请求在协议层究竟做了什么?
一个创建的POST请求在协议层做了以下几件事情:
-
建立TCP连接:客户端向服务器发送SYN包,服务器回复SYN+ACK包,客户端再回复ACK包,建立TCP连接。
-
发送HTTP请求头:客户端向服务器发送HTTP请求头,包括请求方法(POST)、请求资源的URL、HTTP协议版本、请求头部字段等信息。
-
发送请求体:如果有请求体(即提交的数据),客户端将请求体发送给服务器。
-
服务器响应:服务器接收到请求后,根据请求头部字段和请求体进行处理,并返回HTTP响应头和响应体。
-
接收HTTP响应头:客户端接收到服务器返回的HTTP响应头,包括响应状态码、响应头部字段等信息。
-
接收HTTP响应体:如果有响应体,客户端接收并处理响应体。
-
关闭TCP连接:客户端和服务器之间的TCP连接在请求和响应结束后关闭。
协议里有什么
请求流程
不足与展望
二、HTTP框架的设计与实现
2.1分层设计
- 专注性
- 扩展性
- 复用性
- 高内聚 低耦合
- 易复用
- 高扩展性
一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须有一个切实可行的简单系统重新开始——盖尔定律
2.2应用层设计
提供合理的API
- 可理解性:如ctx.Body(),ctx.GetBody(),不要用ctx.BodyA()
- 简单性:如ctx.Request().Header.Peek(key)/ctx.GetHeader(key)
- 冗余性
- 兼容性
- 可测性
- 可见性
2.3中间件设计
中间件需求:
- 配合Handler实现一个完整的请求处理生命周期
- 拥有预处理逻辑与后处理逻辑
- 可以注册多中间件
- 对上层模块用户逻辑模块易用
适用场景:
- 日志记录
- 性能统计
- 安全控制
- 事务处理
- 异常处理
2.4 路由设计
如何匹配HTTP方法?
外层Map:根据method进行初步筛选
如何做设计
- 明确需求:考虑清楚要解决什么问题、有哪些需求
- 业界调研:业界都有哪些解决方案可供参考
- 方案权衡:思考不同方案的取舍
- 方案评审:相关同学对不同方案做品评审
- 确定开发:确定最合适的方案进行开发
2.5协议层设计
2.6网络层设计
2.7总结
API设计:可理解性、简单性...
中间件设计:洋葱模型
路由设计:前缀匹配数
协议层设计:抽象出适合的接口
网络层设计:网络模型
三、企业事件
追求性能
追求易用,减少误用
打通内部生态
文档建设、用户群建设