文章目录
- HTTP/1.1
-
- HTTP/1.1 相? HTTP/1.0 性能上的改进:
- HTTP2
-
-
- HTTP/1.1性能问题
- HTTP2.0的优化:
- 1. 头部压缩
- 2. 二进制帧
- 3. 并发传输(多路复用)
- 4. 服务器主动推送资源
-
HTTP/1.1 HTTP/1.1 相? HTTP/1.0 性能上的改进:
- 使? TCP ?连接的?式改善了 HTTP/1.0 短连接造成的性能开销。
- ?持管道(pipeline)?络传输,只要第?个请求发出去了,不必等其回来,就可以发第?个请求出去,可以减少整体的响应时间。
- 延迟难以下降,虽然现在?络的「带宽」相?以前变多了,但是延迟降到?定幅度后,就很难再下降了,说?了就是到达了延迟的下限;
- 并发连接有限,?歌浏览器最?并发连接数是 6 个,?且每?个连接都要经过 TCP 和 TLS 握?耗时,以及TCP 慢启动过程给流?带来的影响;
- 队头阻塞问题,同?连接只能在完成?个 HTTP 事务(请求和响应)后,才能处理下?个事务;
- HTTP 头部巨?且重复,由于 HTTP 协议是?状态的,每?个请求都得携带 HTTP 头部,特别是对于有携带cookie 的头部,? cookie 的??通常很?;
- 不?持服务器推送消息,因此当客户端需要获取通知时,只能通过定时器不断地拉取消息,这?疑浪费?了带宽和服务器资源。
HTTP2.0的优化:
1. 头部压缩
HTTP 协议的报?是由「Header + Body」构成的,对于 Body 部分,HTTP/1.1 协议可以使?头字段 「Content Encoding」指定 Body 的压缩?式,?如? gzip 压缩,这样可以节约带宽,但报?中的另外?部分 Header,是没有针对它的优化?段。
HTTP/1.1 报?中 Header 部分存在的问题:
- 含很多固定的字段,?如Cookie、User Agent、Accept 等,这些字段加起来也?达?百字节甚?上千字节,所以有必要压缩;
- ?量的请求和响应的报??有很多字段值都是重复的,这样会使得??带宽被这些冗余的数据占?了,所以必须要避免重复性;
- 字段是 ASCII 编码的,虽然易于?类观察,但效率低,所以有必要改成?进制编码;
HTTP/2 没使?常?的 gzip 压缩?式来压缩头部,?是开发了 HPACK 算法,HPACK 算法主要包含三个组成部分:
- 静态字典;
- 动态字典;
- Huffman 编码(压缩算法);
2. 二进制帧
HTTP/2 厉害的地?在于将 HTTP/1 的?本格式改成?进制格式传输数据,极?提?了 HTTP 传输效率,?且?进制数据使?位运算能?效解析。
你可以从下图看到,HTTP/1.1 的响应 和 HTTP/2 的区别:
文章图片
HTTP/2 把响应报?划分成了两个帧(Frame),图中的 HEADERS(?部)和 DATA(消息负载) 是帧的类型,也就是说?条 HTTP 响应,划分成了两个帧来传输,并且采??进制来编码。
HTTP/2 ?进制帧的结构如下图:
文章图片
帧?度后?的?个字节是表示帧的类型,HTTP/2 总共定义了 10 种类型的帧,?般分为数据帧和控制帧两类,如下表格:
文章图片
帧类型后?的?个字节是标志位,可以保存 8 个标志位,?于携带简单的控制信息,?如:
- END_HEADERS 表示头数据结束标志,相当于 HTTP/1 ?头后的空?(“\r\n”);
- END_STREAM 表示单?向数据发送结束,后续不会再有数据帧。
- PRIORITY 表示流的优先级;
最后?就是帧数据了,它存放的是通过 HPACK 算法压缩过的 HTTP 头部和包体。
3. 并发传输(多路复用)
HTTP/2 是可以在?个连接中并发多个请求或回应,?不?按照顺序??对应。知道了 HTTP/2 的帧结构后,我们再来看看它是如何实现并发传输的。
我们都知道 HTTP/1.1 的实现是基于请求-响应模型的。同?个连接中,HTTP 完成?个事务(请求与响应),才能处理下?个事务,也就是说在发出请求等待响应的过程中,是没办法做其他事情的,如果响应迟迟不来,那么后续的请求是?法发送的,也造成了队头阻塞的问题。
? HTTP/2 就很?逼了,通过 Stream 这个设计,多个 Stream 复??条 TCP 连接,达到并发的效果,解决了HTTP/1.1 队头阻塞的问题,提?了 HTTP 传输的吞吐量。
为了理解 HTTP/2 的并发是怎样实现的,我们先来理解 HTTP/2 中的 Stream、Message、Frame 这 3 个概念。
文章图片
你可以从上图中看到:
- 1 个 TCP 连接包含?个或者多个 Stream,Stream 是 HTTP/2 并发的关键技术;
- Stream ?可以包含 1 个或多个 Message,Message 对应 HTTP/1 中的请求或响应,由 HTTP 头部和包体构成;
- Message ?包含?条或者多个 Frame,Frame 是 HTTP/2 最?单位,以?进制压缩格式存放 HTTP/1 中的内容(头部和包体);
在 HTTP/2 连接上,不同 Stream 的帧是可以乱序发送的(因此可以并发不同的 Stream ),因为每个帧的头部会携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息,?同?Stream内部的帧必须是严格有序的。
客户端和服务器双?都可以建? Stream, Stream ID 也是有区别的,客户端建?的 Stream 必须是奇数号,?服务器建?的 Stream 必须是偶数号。
HTTP/2 通过 Stream 实现的并发,? HTTP/1.1 通过 TCP 连接实现并发要?逼的多,因为当HTTP/2实现100 个并发Stream 时,只需要建??次TCP连接,?HTTP/1.1需要建?100个TCP连接,每个TCP连接都要经过TCP握?、慢启动以及TLS握?过程,这些都是很耗时的。
HTTP/2 还可以对每个 Stream 设置不同优先级,帧头中的「标志位」可以设置优先级,?如客户端访问HTML/CSS 和图?资源时,希望服务器先传递 HTML/CSS,再传图?,那么就可以通过设置 Stream 的优先级来实现,以此提??户体验。
4. 服务器主动推送资源
HTTP/1.1 不?持服务器主动推送资源给客户端,都是由客户端向服务器发起请求后,才能获取到服务器响应的资源。
【计算机网络|【图解】HTTP/1.1到HTTP/2.0的演变】?如,客户端通过 HTTP/1.1 请求从服务器那获取到了 HTML ?件,? HTML 可能还需要依赖 CSS 来渲染??,这时客户端还要再发起获取 CSS ?件的请求,需要两次消息往返,如下图左边部分:
文章图片
如上图右边部分,在 HTTP/2 中,客户端在访问 HTML 时,服务器可以直接主动推送 CSS ?件,减少了消息传递的次数。
推荐阅读
- 计算机网络|计算机网络实验二---静态路由配置
- javaWeb|HTTPS 的加密流程(你值得拥有)
- 渗透笔记2|WAF绕过-信息收集之反爬虫延时代理池技术
- 笔记|UA到底是什么
- 嵌入式|以太网口&arm&mos&推挽开漏&上下拉&高低边&时域频域傅里叶
- 网络|Squid传统代理,透明模式,ACl访问控制,日志分析,反向代理
- nginx|Nginx优化与防盗链
- 深度学习论文研读|目标检测网络R-CNN系列与yolov1算法原理概述
- 土地利用数据|通过ArcGIS对GlobeLand30影像镶嵌拼接并去除黑边