自我学习HTTP/2.0 3.0

自我学习HTTP/2.0 3.0

前言

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

自我学习HTTP/2.0 3.0

HTTP/2.0

TCP的问题,我们是无法改变的,只能通过其他办法去避免。所以HTTP/2的解决方案:一个域名只使用一个TCP长连接和消除对头阻塞

HTTP2的多路复用.jpg

1.多路复用

将请求分成一帧一帧的数据去传输,遇到优先级高的请求时(JS或者CSS)关键资源的请求,服务器可以暂停之前的请求,优先处理关键资源的请求。

多路复用的实现

多路复用的实现.png

HTTP/2新增了一个二进制分帧层

  1. 浏览器准备好请求数据(请求行,请求头)等信息;如果是POST方法,还需要请求体;

  2. 这些数据经过二进制分帧层处理后,被转换为一个个带有请求ID编号的帧,通过协议栈将这些帧发送给服务器

  3. 服务器收到后,会将所有相同ID的帧合并为一条完整的请求信息;

  4. 然后服务器处理该条请求,并将处理的响应行响应头响应体分别发送至二进制分帧层;

  5. 二进制分帧层会将这些响应数据转换为一个个带有请求ID编号的帧,经过协议栈发送给浏览器

  6. 浏览器收到响应帧后,会根据ID编号将帧的数据提交给对应的请求。

2.请求优先级

可以在发送请求时,标上该请求的优先级,这样服务器接收到请求之后,会优先处理优先级高的请求。

3.服务器推送

把数据提前推送到浏览器。

4.头部压缩

对请求头和响应头进行了压缩,当请求资源过多时,传输效率会有很大提升。

HTTP/3

基于UDP实现了类似于TCP的多路数据流传输可靠性等功能(QUIC协议)

http2和http3的协议栈.jpg

  • 实现了类似TCP的流量控制、传输可靠性的功能。

    虽然UDP是不可靠的传输,但是QUIC在UDP的基础之上增加了一层来保证数据可靠性传输。他提供了数据重传拥塞控制以及其他一些TCP中存在的特征。

  • 集成了TLS加密功能

    最重要的是:减少了握手次数所花费的RTT个数

  • 实现了HTTP/2中的多路复用功能

    QUIC实现了在同一物理连接上可以有多个独立的逻辑数据流。实现了数据流的单独传输,解决了TCP中队头阻塞的问题

  • 实现了快速握手功能

参考

极客时间:浏览器工作原理与实践

分类:
前端
标签: