HTTP2相比于HTTP1.1,做到了向下兼容,用HPACK算法和Huffman编码(压缩算法),利用静态表压缩header头部传输字段大小,以此提高传输速率;
但是HTTP2依然存在对头阻塞的问题, 只不过是在TCP层面造成的阻塞;
HTTP/2 需要限制 连接时长或者请求次数;
HTTP/2 实现了 Stream 并发;
可以根据资源的渲染顺序来设置 Stream 的优先级,从而提高用户体验;
HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。
=================================我是分割线====================================
相比较HTTP2,HTTP3使用了UDP协议代替了TCP协议,还基于 UDP 协议在「应用层」实现了 QUIC 协议,它具有类似 TCP 的连接管理、拥塞窗口、流量控制的网络特性,相当于将不可靠传输的 UDP 协议变成“可靠”的了,所以不用担心数据包丢失的问题。
QUIC 协议的优点有很多,这里举例几个,比如:
无队头阻塞,stream之间不会再因为对头堵塞而互相影响传输,单个stream只会影响它自己本生这个stream流的传输进度,等到某个stream流丢失的包数据重新发送,这一整个stream流数据才能被应用层接收读取;
更快的连接建立,将传输效率提升至0-RTT;
连接迁移,HTTP2当设备无线和数据流量切换时,会重置TCP链接,HTTP3通过QUIC协议,只要通过连接ID即可完成无缝连接迁移;
HTTP/3 的 QPACK 通过两个特殊的单向流来同步双方的动态表,解决了 HTTP/2 的 HPACK 队头阻塞问题。