HTTP 协议 | 青训营

49 阅读2分钟

1.再谈HTTP协议

1.1 HTTP协议是什么

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

需要明确的边界 开始 结束

能够携带信息 什么消息 消息类型

请求行/状态行 请求头/响应头 请求体/响应体

常见方法名 GET HEAD POST PUT DEL ETE CONNECT OPTIONS TRACE PATCH

状态码: 1xx: 信息类 2xx: 成功 3xx: 重定向 4xx:客户端错误 5xx: 服务端错误

业务层 -服务治理层 -中间件层 -路由层 -协议编(解)码层 -传输层

HTTP1—— 队头阻塞 传输效率低 明文传输不安全

HTTP2—— 多路复用 头部压缩 二进制协议

QUIC—— 基于UDP实现 解决队头阻塞 加密减少握手次数 支持快速启动

1.2 协议里有什么

1.3 请求流程

1.4不足与展望

2.HTTP框架的设计与实现

3.性能修炼之道

4.企业实践

HTTP 框架的设计与实现 专注性 扩展性 复用性

高内聚低耦合 易复用 高扩展性

一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须由一个切实可行的简单系统重新开始。 ---盖尔定律

提供合理的API——可理解性:如ctx.Body(), ctx.GetBody();不要用ctx. BodyA()

简单性:如ctx.Request.Header.Peek(key) /ctx.GetHeader(key)

冗余性 兼容性 可测性 可见性

洋葱模型适用场景: 日志记录 性能统计 安全控制 事务处理 异常处理 *核心逻辑与通用逻辑分离

  1. 既然要实现预处理和后处理,那这个就很像调用了一个函数 2.路由上可以注册多Middleware, 同时也可以满足请求级别有效,只需要将Middleware 设计为和业务和Handler 相同即可。

调用链适用场景:

不调用Next: 初始化逻辑且不需要 在同一调用栈

调用Next: 后处理逻辑或需要在 同一调用栈上

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

静态路由: /a/b/c、 /a/b/d

参数路由: /a/:id/c (/a/b/c, /a/d/c)、 /*all

路由修复: /a/b <-> /a/b/

冲突路由以及优先级: /a/b、 /:id/c

匹配HTTP方法

多处理函数:方便添加中间件

1.明确需求:考虑清楚要解决什么问题、有哪些需求 2.业界调研: 业界都有哪些解决方案可供参考 3.方案权衡:思考不同方案的取舍 4.方案评审: 相关同学对不同方案做评审 5.确定开发: 确定最合适的方案进行开发