0
点赞
收藏
分享

微信扫一扫

详细说明HTTP2相比于HTTP1.x的优缺点

素的盐 2022-03-24 阅读 49
httphttps

优点:
(1)、二进制分帧:
HTTP 1.x 以换行符作为纯文本的分隔符,用文本格式来传输数据。而 HTTP2 的核心是二进制分帧层,HTTP 2将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,二进制协议解析起来更高效。
帧:HTTP2数据通信的最小单位消息,指HTTP2中逻辑上的HTTP消息。例如请求和响应等,消息由一个或者多个帧组成。
流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有唯一的整数ID。
(2)头部压缩:
HTTP/1.x会在请求和响应中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。HTTP2 头部压缩,重复数据不发送,数据不是文本,而是二进制。HTTP2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。(可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量)
(3)服务器推送:
HTTP2 服务器推送。除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。服务器端可以在发送页面HTML时主动推送其他资源,而不用等到浏览器解析到相应位置,发起请求在响应。例如服务端可以主动把js和css文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。服务器可以主动推送,客户端也有权利是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送给第三方资源给客户端。
(4)多路复用
HTTP1.x中,如果想并发多个请求,必须使用多个TCP链接,且浏览器为了控制资源,还会对单个域名有6-8个的TCP链接请求限制。HTTP2中:同域名所有通信都在单个连接上完成,单个连接可以承受任意数量的双向数据流,相应的,每个数据流以消息的形式发送,而消息又由一个或者多个帧组成,多个帧之间可以乱序发送,然后再根据每个帧首部的流标识符重新组装。HTTP2 共享连接,也避免了队头阻塞现象。
(5)传输内容加密:
HTTP1.x以明文文本字符串的形式传输内容,存在安全问题。虽然HTTP2不强制加密,但是chrome firefox都公开宣布只支持加密的HTTP2.0所以实事上HTTP2.0是加密的。

缺点:
主要是底层支持的TCP协议造成的问题
(1)、TCP 以及 TCP+TLS 建立连接的延时
TCP 连接需要和服务器进行三次握手,即消耗完 1.5 个 RTT 之后才能进行数据传输。
TLS 连接有两个版本— TLS1.2 和 TLS1.3,每个版本建立连接所花的时间不同,大致需要 1~2 个 RTT。
RTT:往返时延。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
(2)、TCP 的队头阻塞并没有彻底解决
TCP 为了保证可靠传输,有一个“超时重传”机制,丢失的包必须等待重传确认。HTTP2 出现丢包时,整个 TCP 都要等待重传,那么就会阻塞该 TCP 连接中的所有请求。
(3)、多路复用导致服务器压力上升
多路复用没有限制同时请求数。请求的平均数量与往常相同,但实际会有许多请求的短暂爆发,导致瞬时 QPS 暴增。
(4)、多路复用容易 Timeout
大批量的请求同时发送,由于 HTTP2 连接内存在多个并行的流,而网络带宽和服务器资源有限,每个流的资源会被稀释,虽然它们开始时间相差更短,但却都可能超时。

举报

相关推荐

0 条评论