http1.1和http2.0的区别

发布时间 2023-06-13 17:34:53作者: 写代码的马小跳

http2对比http1的性能提升点:

  1.多路复用

  2.二进制格式

  3.头部压缩

  4.服务器推送

  5.强化安全性

下面分条一一介绍:

一:多路复用

  HTTP2 的多路复用(Multiplexing)是指在同一个 TCP 连接上,客户端可以同时发起多个请求,服务器可以同时响应多个请求。

  在 HTTP1.x 中,由于采用了串行请求和响应方式,每次只能请求一个资源,响应完毕后再请求下一个资源,因此效率较低。

  而 HTTP2 的多路复用技术,可以让客户端的多个请求同时在一个连接中传输,从而大大提高传输效率,减少网络延迟,提升网站的性能和响应速度。

二:二进制格式

  HTTP2 的二进制格式采用了帧(Frame)的概念,将 HTTP 报文拆分为更小的单元进行传输,从而提高传输效率。

  二进制格式由三个部分组成:帧头部、帧负载和帧尾部。其中,帧头部包括了帧的类型、长度、标识符和标志等信息;帧负载包括了 HTTP 报文的具体内容;帧尾部包括了帧校验和等信息。

三:头部压缩

  HTTP2 的头部压缩技术采用了 HPACK 算法,它将 HTTP 头部信息压缩为二进制格式,从而减少网络传输的负载。这一算法基于哈夫曼编码和字典压缩等技术,能够将 HTTP 头部信息压缩至原来的 10% 左右。

  具体来说,HPACK 算法包括两个部分:静态表和动态表。静态表包含了一些常用的 HTTP 头部信息,例如请求方法、状态码等,这些信息在多个请求中都会用到,因此可以预先存储在客户端和服务器端,避免重复传输。动态表则是根据当前请求和响应中的头部信息动态生成的,它可以存储一些不常用但是在当前请求和响应中出现的头部信息,避免重复传输。

  在 HPACK 算法中,头部信息会被分为字面值和索引值两种形式进行压缩。字面值即头部字段的文本形式,而索引值则是指静态表和动态表中的索引值。当头部信息在静态表或动态表中存在时,可以使用对应的索引值进行压缩,这样可以大大减少传输数据量。如果头部信息没有在表中找到对应的索引值,就采用字面值进行传输。

四:服务器推送

  HTTP2 的服务器推送是指服务器在收到客户端请求之后,主动推送一些客户端需要的资源,避免客户端多次发起请求,从而提高页面加载速度。

具体来说,服务器推送的流程如下:

  1. 客户端向服务器发送请求,请求某个页面或资源。
  2. 服务器根据请求的内容,主动推送一些客户端需要的资源,例如图片、CSS、JavaScript 等。
  3. 客户端收到推送的资源后,可以直接使用这些资源,避免了多次请求的过程,提高了页面加载速度。

  需要注意的是,服务器推送需要遵循一些规则,避免出现资源浪费或者重复推送的情况。例如,推送的资源必须与客户端请求的内容相关,不能无关紧要地推送一些资源。同时,客户端需要给出相应的信号,告诉服务器已经缓存了某些资源,避免服务器重复推送。

五:强化安全性

  HTTP 2是使用TLS加密传输,提供更强的安全性。通过使用TLS,可以保护数据的机密性和完整性,防止中间人攻击和数据篡改。

 

总之,HTTP2 提高了页面加载速度,减少网络传输的负载,从而提高网站的性能和响应速度。