Bootstrap

http1.1与http2.0的区别及应用场景

一,区别

1. 兼容性

2015年IETF(互联网工程任务组)发布http2.0,2.0在1.1基础上升级(更安全高效),完全兼容1.1版本,至今已有30%的网站使用(谷歌,淘宝等),Apifox目前支持2.0协议的调试。

2. http2.0具体在1.1版本上做了哪些升级?

(1)1.1版本采用串行请求-响应模型,即前一个请求响应完成后才能发送第二个请求,对于多个请求并发的场景来说存在队头阻塞的问题。   

      解决:2.0引入二进制分帧层,能够并行发送多个请求和响应,解决了队头阻塞问题。相较于1.1版本的文本格式,2.0使用二进制格式传输数据,提高了效率并降低了数据传输的延迟。

了解http2.0二进制分帧

1,数据帧:
  (1) 一个http消息由:请求行,请求头,空行,请求数据,或者状态行、消息报头、空行和响应正文组成,二进制分帧把http消息分割成多个数据帧(Frame)来进行传输和处理;
  (2)每个数据帧(Frame)由:帧头部和帧负载组成,可以独立(或并发)发送,接收,不需要等待前
一个数据帧的完成;
  (3)多个http消息可以在一个连接上并发传输,每个http消息被切分为多个数据帧,独立进行传输和处理;

2,流:
  (1)流是连接的一个虚拟通道,每个http消息与唯一的流相关联,数据帧通过识别流标识来与http消息相关联,同一个连接上可以并行发送和接收多个流(并发数量由客户端控制);

 (2)流标识:唯一整数标识符,为了防止两端流ID冲突,客户端发起的流具有奇数ID,服务器端发起的流具有偶数ID;
 (3)可以指定每个流的优先级,使服务器和客户端优先处理重要的流;

(2)1.1版本在每个请求和响应都会携带冗长的头部信息(部分信息是重复的),造成了不必要的网络传输开销。

         解决:2.0使用了HPACK算法进行头部压缩,减小了头部信息的大小,提高了性能和效率。

http2.0中对于相同的数据(用户代理、可接受的媒体类型,等等)只需发送一次;对于发生变化的数据,只需将变化的部分加入到header帧中,改变的部分会加入到头部字段表中,首部表在 http 2.0 的连接存续期内始终存在,由客户端和服务器共同渐进地更新。

需要注意的是,http 2.0关注的是首部压缩,而我们常用的gzip等是报文内容(body)的压缩,二者不仅不冲突,且能够一起达到更好的压缩效果。

(3)1.1版本中每个请求需要单独建立和关闭连接,浪费时间和资源。

         解决:2.0通过一个连接可以同时传输多个请求和响应,实现了多路复用,提高了性能和效率。

多路复用

   (1)在http1.1中,客户端在同一时间,针对同一域名下的请求有一定数量的限制,超过限制数目的请求会被阻塞。

   (2)http2.0中客户端与服务器只需一次连接,且连接是持久化的,可承载数百个流的复用,这意味着来自不同的流的数据包可以混合在一起通过一个连接进行传输,当到达终点时,再根据不同帧首部的流标识符重新连接将不同的数据流进行组装。

(4)1.1版本只能客户端发起请求获取资源
         解决:2.0服务器可以主动发送资源给客户端,提前将可能需要的资源发送给客户端,减少了延迟和开销。

服务器可以对一个请求发送多个响应,服务器向客户端推送资源无需客户端明确地请求。

服务器推送还有一个很大的优势:可以缓存!也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。

当服务端需要主动推送某个资源时,便会发送一个 Frame Type 为 PUSH_PROMISE 的 Frame,里面带了 PUSH 需要新建的 Stream ID。意思是告诉客户端:接下来我要用这个 ID 向你发送东西,客户端准备好接着。客户端解析 Frame 时,发现它是一个 PUSH_PROMISE 类型,便会准备接收服务端要推送的流。

(5)2.0版本默认TLS加密传输数据,提高了安全性。

HTTPS可以选择不同的安全协议,这里讲一下TLS与SSL的区别:

    (1)SSL是较早的安全协议,TLS是后继者,加强了密钥交换协议并提供了更强的加密方式,更安全;

     (2)TLS兼容性和性能更好,简化了握手过程,减少网络通信开销,从而提高连接速度和效率;

    (3)TLS支持更多更安全的加密算法,如AES,SHA(如带有RSA加密的SHA-256算法),而SSL支持的算法有限(如RSA和MD5或SHA-1算法);      

3.  http与服务器建立连接的过程

原理:基于TCP/IP协议来建立连接;

1,TCP是一种面向连接的可靠的协议,它负责在网络中可靠的传输数据,提供了数据分割,重组,流量控制,拥塞控制等功能,它能确保数据按照顺序到达目的地;
2,IP是一种网际协议,用于在网络中寻址和路由数据包,负责将数据包从源主机发送到目标主机;
3,TCP/IP协议栈:常用于互联网的数据传输,TCP负责可靠的传输数据,IP负责寻址和路由数据包;

过程:

   (1)DNS解析:客户端向DNS服务器发送一个DNS查询请求,获取服务器ip地址;

   (2)建立TCP连接:客户端使用ip地址,端口通过TCP/IP协议与服务器建立连接,期间需要进行三次握手才能确保双方能够可靠的通信;

       

TCP三次握手过程:
   (1)第一次握手:客户端向服务器发送一个SYN请求(请求包含一个初始的序列号用于后续的数据传输),表示客户端希望建立一个连接;
   (2)第二次握手:服务器收到SYN请求,会返回一个SYN-ACK响应(响应包含了确认序号和新的序列号),服务器为后续的数据传输分配了资源;
   (3)第三次握手:客户端收到服务器返回的SYN-ACK响应后,会发回一个ACK响应,表示客户端对服务器的连接请求进行了确认,这个ACK中的确认序号与服务器协商后的数据序号一致;

TCP三次握手的目的是为了确保双方能够进行正常的收发数据,通过握手传递最初的序列号,并进行一些状态的确认和同步,保证后续数据传输的可靠性和顺序性;

需要注意:确认序号=初始序列号+1,如:若SYN中初始序列号为X,则SYN-ACK中的确认序号为 X+1,若SYN-ACK中新的序列号为Y,则ACK中的确认序号为Y+1;
 

   (3)发起http请求:建立TCP连接后,客户端就可以通过该连接向服务器发送http请求;

   (4)服务器处理请求,通过TCP连接将响应的数据发送给客户端;

   (5)客户端接收数据,解析提取数据,渲染页面;

   (6)断开TCP连接。

注意:http1.1每次请求都需要建立新的TCP连接,响应后断开;2.0的多路复用可以在一个TCP连接上同时发送多个请求和接收多个响应,服务器可以选择关闭连接或缓存响应。

二,应用场景

HTTP/2.0相比HTTP/1.1在性能方面有很大的改进和优化,特别适用于网络环境较差或需要大量并行请求的场景,如大型网站、多媒体应用、实时通信等。而HTTP/1.1仍然广泛应用于互联网中的大部分场景。

申明:内容来源网络,由笔者整理,原文:深入理解http2.0协议,看这篇就够了! - 知乎

;