-
HTTP/2很好的解决了当前常用的
HTTP/1
的一些性能问题,但兼容等问题使得它并不普及。相较来说,HTTP/2
大幅度提高了网页的性能。 -
HTTP/2
中使用了多路复用的技术,这个技术可以只通过一个TCP
连接就传输所有的请求数据。该技术很好的解决了浏览器限制同一个域名下的请求数量被限制的问题,同时也间接更容易实现全速传输,因为新开连接后的传输速度是慢慢提升的。
多路复用:帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也即是多个帧组成的数据流。在一个TCP
连接中,可以存在多条流。换句话说,就是可以发送多个请求,对端可以通过帧中的标识知道其属于哪个请求,从而避免了队头阻塞的问题,极大提高性能。通过 该链接 感受下 HTTP/2 比 HTTP/1 到底快了多少。
Header压缩:如果header
中携带了cookie
那么每次请求都需要重复传输几百到几千字节。而在HTTP/2
中,使用了HPACK
压缩格式对其进行编码,减少了header
的大小,并在两端维护了一个索引表,记录出现过的header
,后面在传输中就可以传输已经记录过的header
的键名,对端接收到数据后通过键名找到对应的值。
服务端PUSH:在HTTP/2
中,服务端可以在客户端某个请求后,主动推送其他资源。减少了延迟,在浏览器兼容的情况下也可考虑prefetch
-
相比于
HTTP/1
的文本方式传输,HTTP/2
引入的新的编码机制,使得传输数据被分割,并采用二进制编码格式,成了加强其性能的核心点。 -
HTTP/3
:Google搞了一个基于UDP
协议的QUIC
协议,使用在了HTTP/3
上。从H2
到H3
是由于H2
的多路复用在一个域名下只需要使用一个TCP
连接,当这个连接出现了丢包的情况,整个TCP
都要进行重传,后面的数据都将被阻塞,其表现将不如H1
,这样就有人会想去修改TCP
协议,但是这个协议是基于操作系统实现的,充斥在各种设备中,修改不易,所以有了谷歌的另起炉灶。 -
QUIC
新增了多路复用、0-RTT
、TLS1.3
加密、流量控制、有序交付、重传等功能,多路复用:因为
TCP
是基于IP
和端口去识别连接的,在多边的移动网络环境下就会变得很脆弱。而QUIC
是通过ID
的方式去识别一个连接,只要ID
不变,就能连上。所以在移动端,QUIC
的表现比TCP
好。且其原生就实现了多路复用,传输的单个数据流可以保证有序交付,不会影响其他的数据流,从而解决了TCP
存在的问题。0-RTT
:通过使用类似TCP
快速打开的技术,缓存当前会话的上下文,在下次会话恢复的时候,只需要将之前的缓存发给服务器验证通过就可以继续传输。纠错机制:丢失一个包的情况下适用,但是丢失多个包就需要使用重传了。
总结:
HTTP/2 通过多路复用、二进制流、Header 压缩等等技术,极大地提高了性能,但是还是存在着问题的
QUIC
基于UDP
实现,是 HTTP/3 中的底层支撑协议,该协议基于UDP
,又取了TCP
中的精华,实现了即快又可靠的协议
网友评论