HTTP演进
常见HTTP版本有:HTTP/1.1,HTTP/2.0,HTTP/3.0;
# HTTP/1.1
优化点:
- 使用长连接改善了1.0短连接造成的性能开销;
- 支持管道网络传输,只要第一个请求发送出去,不必等其回来,就可以发第二个请求,减少整体响应时间;
性能瓶颈:
- 请求头未被压缩,只压缩请求体;
- 对头阻塞;
- 请求只能从客户端开始;
# HTTP/2
优化点:
基于HTTPS,安全性有保障;
请求头压缩,多个请求头部一样,协议会帮消除重复部分;
并发传输,解决对头阻塞;
一个TCP连接包含多个Stream,Stream中包含多个Message,Message对应HTTP/1中请求和响应;
服务器推送;
服务器可以主动向客户端发送消息;客户端和服务端双方都建立Stream;
性能瓶颈:
TCP层面的队头阻塞;
TCP层必须保证受到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给HTTP应用,当前1个字节数据没有到达,后受到的字节数据只能放在内核缓冲区,只有等到这1个字节数据到达,应用层才能在内核中拿到数据;
# HTTP/3
将传输层协议改为UDP;
UDP 的 QUIC协议实现可靠性传输;
QUIC连接上多个Stream之间没有依赖,某个流发生丢包,只会影响该流,其它流不受影响;