前言
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
自我学习HTTP/2.0 3.0
HTTP/2.0
TCP的问题,我们是无法改变的,只能通过其他办法去避免。所以HTTP/2的解决方案:一个域名只使用一个TCP长连接和消除对头阻塞。
1.多路复用
将请求分成一帧一帧的数据去传输,遇到优先级高的请求时(JS或者CSS)关键资源的请求,服务器可以暂停之前的请求,优先处理关键资源的请求。
多路复用的实现
HTTP/2新增了一个二进制分帧层:
-
浏览器准备好请求数据(请求行,请求头)等信息;如果是POST方法,还需要请求体;
-
这些数据经过二进制分帧层处理后,被转换为一个个带有请求ID编号的帧,通过协议栈将这些帧发送给服务器;
-
服务器收到后,会将所有相同ID的帧合并为一条完整的请求信息;
-
然后服务器处理该条请求,并将处理的响应行,响应头和响应体分别发送至二进制分帧层;
-
二进制分帧层会将这些响应数据转换为一个个带有请求ID编号的帧,经过协议栈发送给浏览器;
-
浏览器收到响应帧后,会根据ID编号将帧的数据提交给对应的请求。
2.请求优先级
可以在发送请求时,标上该请求的优先级,这样服务器接收到请求之后,会优先处理优先级高的请求。
3.服务器推送
把数据提前推送到浏览器。
4.头部压缩
对请求头和响应头进行了压缩,当请求资源过多时,传输效率会有很大提升。
HTTP/3
基于UDP实现了类似于TCP的多路数据流、传输可靠性等功能(QUIC协议)
-
实现了类似TCP的流量控制、传输可靠性的功能。
虽然UDP是不可靠的传输,但是QUIC在UDP的基础之上增加了一层来保证数据可靠性传输。他提供了数据重传、拥塞控制以及其他一些TCP中存在的特征。
-
集成了TLS加密功能
最重要的是:减少了握手次数所花费的RTT个数
-
实现了HTTP/2中的多路复用功能
QUIC实现了在同一物理连接上可以有多个独立的逻辑数据流。实现了数据流的单独传输,解决了TCP中队头阻塞的问题
-
实现了快速握手功能
参考
极客时间:浏览器工作原理与实践