“这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
HTTP协议是当今使用最为广泛的协议之一,HTTP是客户端与服务端通信的基础协议。
HTTP0.9
第一个HTTP协议版本。是从1991年开始大规模使用,到现在的话已经有30多年了。
协议内容
主要分为请求和响应。有请求行(方法名、URL、协议、版本)和响应行(协议版本、状态码、状态码描述),有请求头和响应头,有请求体和响应体。
HTTP的不足与展望
HTTP1
不足:
1.队头阻塞。
基于TCP,后续的分片必须要等待前面的分片的到来才能继续发送,否则的话会一直等待。
2.传输效率低。
协议里面无用的信息可以说是非常的多,存在很多重复的头部等。而且不支持多路复用,请求没结束之前是不能再发送其他请求的。
3.明文传输不安全。
HTTP2
优点:
1.多路复用。
2.头部压缩。
3.二进制协议。
HTTP2解决了一部分问题,但还是基于TCP,并没有解决队头阻塞问题。
QUIC
优点:
1.基于UDP实现。
2.解决队头阻塞。
3.加密减少握手次数。
4.支持快速启动。
分层设计
应用层
1.提供合理的api。
中间件
1.洋葱模型。
路由设计
1.静态路由,如/a/b。
协议层
1.抽象出合适的接口。
网路层
1.bio阻塞等待、nio监听定时、aio通知。
性能优化
针对网络库的优化
1.net
优势:流式友好、小包性能高。
2.netpoll
优势:中大包性能高、时延低。
针对协议的优化
1.Headers解析
快速解析如通过 Header key 首字母快速筛除掉完全不可能的 key ;解析对应 value 到独立字段;使用 byte slice 管理对应 header 管理,方便复用。
2.热点资源池化
对于这种场景,我们把request放入池子里。当请求来的时候,我们做一些初始化,把它进行一个response的一个返回,之后我们处理完又把它返回去。