HTTP2.0相对HTTP1.x的优化点

程序员小迷 2024-08-24 10:54:23

一、传输格式

1.HTTP1.x 的协议解析是基于文本的,这种解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景会很多。

2.HTTP2.0使用新的二进制格式(Binary Format),即二进制分帧,这种方式则只处理 0 和 1 的组合。HTTP2.0会将所有传输的数据分割为更小的消息和帧,并对它们进行二进制编码。二进制协议解析起来更高效,并且线上传输更紧凑,错误率更低。

基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

二、多路复用

1.多路复用(Multiplexing),即连接共享,即在一个TCP连接上并行地发送多个HTTP请求和响应。一个 HTTP request 对应一个 id,这样一个连接上可以有多个 request,每个连接的request 可以随机的混合在一起,接收方可以根据 request 的 id 将 request 再归属到各自不同的服务端请求里面。

三、队头阻塞(Head of Line (HOL) Blocking)问题

1.HTTP1.0 不支持请求管道化,即在一个连接上不能同时发送多个请求。

HTTP1.1 支持请求管道化,同一连接上可以同时发送多个请求。但服务器必须按照请求的顺序进行响应,因此可能会造成队头阻塞(Head of Line Blocking)问题。

2.HTTP2.0多路复用通过多个请求 共享一个 TCP 连接的方式,解决了HTTP request层面的 队头阻塞(HOL blocking ,即Head of Line blocking)的问题,即解决了HTTP 1.x中的队头阻塞问题,但TCP层面的队头阻塞问题(由于丢失或延迟的数据包导致重传阻塞)并未解决,基于QUIC(Quick UDP Internet Connections)的HTTP/3基本可以解决队头阻塞问题。

四、Header 压缩

1.HTTP1.x 的 header 带有大量信息,而且每次都要重复发送。HTTP2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。

2.HTTP2.0 使用HPACK算法来对请求和响应的头信息进行压缩。

五、服务端推送(server push)

1.同 SPDY 一样,HTTP2.0 也具有 服务端推送 功能。

通过提前发送那些服务端认为客户端可能会需要的资源,可以提高响应速度和用户体验。

六、流量控制

1.HTTP2.0引入了流量控制机制,通过流控制窗口和流控制令牌等来控制数据传输速率,允许客户端或服务端限制另一端发送数据的速率,防止客户端或服务端因需要接收过多或过快的数据而无法处理。

七、请求优先级

1.HTTP2.0允许客户端为请求指定优先级,从而使服务端根据优先级来分配资源和发送响应。

八、保持连接活跃

1.HTTP2.0默认保持连接活跃,不需要通过Connection:Keep-Alive头部或非标准的管道化技术来保持连接活跃。

九、安全性

1.虽然HTTP2.0 支持明文HTTP传输,但主流浏览器和服务端通常都使用基于TLS(Transport Layer Security)的HTTP2.0,从而保证传输的安全性。

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

0 阅读:6

程序员小迷

简介:致力于Android、iOS、C、Java等编程技术的技巧经验分享