HTTP协议 | 青训营

53 阅读1分钟

Http协议: 超文本传输协议

Http协议中有:

请求行
方法名 //常见方法名;GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH
URL
协议版本

状态行
协议版本
状态码 1xx;信息类 2xx;成功 3xx;重定向 4xx;客户端错误 5xx:服务端错误
状态描述

不足和提升:
HTTP1:队头阻塞 传输效率低 明文传输不安全
HTTP2:多路复用 头部压缩 二进制协议
QUIC:基于UDP实现 解决队头阻塞 加密减少握手次数 支持快速启动

HTTP框架设计

应用层设计
提供合理的API 可理解性 简单性 冗余性 兼容性 可测性 可见性

中间件设计
需求:
-配合Hander实现一个完整的请求处理生命周期
-拥有预处理逻辑和后处理逻辑
-可以注册多中间件
-对上层模块用户逻辑模块易用
洋葱模型

路由设计
框架路由实际上就是为URL匹配对应的处理函数(Handers)
-静态路由:/a/b/d 、/a/b/c
-参数路由:/a/:id/c (/a/b/c, /a/d/c)、/*all
-路由修复:/a/b <-> /a/b/
-冲突路由以及优先级:/a/b , /:id/c
-匹配HTTP方法
-多处理函数:方便添加中间件

协议层设计 -抽象出合适的接口

网络层设计 网络模型

协议优化

Headers解析

case 'h':
if utils.CaseInsensitiveCompare(s.Key, bytestr.StrHost){
h.SetHostBytes(s.Value)
continue
}
...
}

1.通过Header key 首字母快速筛选掉完全不可能的key
2.解析对应value到独立字段
3.使用 byte slice 管理对应 header 存储,方便复用

header key 规范化 aaa-bbb -> Aaa-Bbb

热点资源池化