http1.1、http2和http3的区别

274 阅读6分钟

http1.1

http1.1的重要特性和改进(http1.1虽然有了一定的改进,但由于仍然基于文本传输,并且存在一些性能瓶颈)

1.持久连接:http1.1默认使用持久连接,即在单个TCP连接上可以传输多个http请求和响应,避免了每次请求都建立和关闭tcp连接的开销,提高了性能

2.流水线:http1.1支持请求和响应的流水线化,允许客户端发送多个请求而无需等待服务器响应,提高了请求的并发处理能力

3.分块传输编码:http1.1引入了分块传输编码,允许服务器将响应数据分成多块进行传输,有利于在接收到数据的同时进行处理,提高了效率

4.范围请求:http1.1支持范围请求,允许客户端只请求资源的部分内容,而不是整个资源,有利于断点续传,多线程下载的功能的实现

范围请求(Range Requests)在断点续传和多线程下载中发挥重要作用的原因如下:

  1. 断点续传:当下载一个大文件时,如果下载过程中发生中断或暂停,传统的方式需要重新从文件的开头开始下载,这样会浪费已经下载的部分。而范围请求允许客户端只请求未下载的部分内容,通过指定文件的字节范围来继续下载。客户端可以发送一个包含"Range"头部的请求,指定下载的起始字节位置,服务器会返回对应字节范围的内容。这样就能够实现断点续传,减少重复下载的数据量。
  2. 多线程下载:多线程下载可以加快文件的下载速度,将文件分割成多个部分,每个线程负责下载其中的一部分,然后将下载的部分合并为完整的文件。范围请求可以让每个线程分别请求不同的字节范围,从而实现并发下载。每个线程只需请求自己负责的部分,而不需要下载整个文件。这样可以充分利用带宽,提高下载速度。

5.缓存控制:http1.1引入了更丰富的缓存控制机制,包括强缓存和协商缓存,通过缓存机制可以减少对服务器的请求,提高性能和效率

http2

1.二进制传输:http2使用二进制格式对数据进行传输,取代了http1.x使用的文本传输格式,提高了数据传输的效率和解析速度

2.多路复用:http2通过在单个TCP连接上并行发送多个请求和响应,实现了请求的并发处理,避免了http1.x中的对头阻塞问题,提高了性能和效率

3.头部压缩:http2使用HPACK算法对http头部进行压缩,减少了头部的数据量,降低了带宽消耗,并提高了解析的速度

4.服务器推送:http2允许服务器在客户端请求之前主动推送相关的资源,减少了客户端请求的延迟和带宽消耗,提高了页面加载速度

5.流量优先级:http2支持对请求和响应进行优先级排序,允许客户端和服务器设置数据流的优先级,优化了数据传输的顺序和优先级,提高了性能

htpp3

http3是一种基于QUIC(Quick UDP Internet Connections)协议的新一代http协议

1,基于UDP:http3使用UDP作为传输层协议,而不是TCP,UDP具有更低的延迟和更好的拥塞控制机制,适用于高延迟和丢包率较高的网络环境,如移动网络环境,相比于TCP,UDP更加适合在不可靠的网络上提供可靠的传输性能

2.多路复用:http3继承了http2上的多路复用,允许在单个连接上并发多个请求和响应,减少了建立和维护连接的开销,提高了性能和效率

3.O-RTT连接建立:http3支持O-RTT(Zero Round Trip Time)连接建立,允许在之前创建过的连接上进行快速恢复,减少了握手的延迟

4.可靠的流量控制和拥塞控制:http3内置了可靠的流量控制和拥塞控制机制,能够更好的适应网络的变化和拥塞情况,提供更稳定和可靠的传输性能

5.减少头部阻塞:http3使用了基于QUIC的传输协议,通过将请求和响应分装成数据包的方式传输,避免了http1.1和http2中常见的头部阻塞问题,提高了并发性能和效率

6.支持移动端优化:http3针对移动端网络环境进行了优化,通过降低延迟,提高连接的稳定性和效率,减少了用户在移动设备上的等待时间和能耗

UDP(User Datagram Protocol)适用于高丢包率和高延迟的网络环境的原因如下:

  1. 较低的延迟:UDP相比于TCP(Transmission Control Protocol)具有较低的延迟。TCP是一种面向连接的协议,它需要进行三次握手和可靠性保证,这些过程会增加延迟。而UDP是一种无连接的协议,不需要建立和维护连接,因此可以减少握手和维护连接的时间,从而降低延迟。
  2. 无拥塞控制:UDP不具备拥塞控制机制,这使得它能够更快地将数据发送到目的地,而不需要等待确认或进行重传。在高延迟和高丢包率的网络环境中,拥塞控制机制可能会导致较长的等待时间和额外的延迟。因此,UDP在这种情况下更适合传输实时性要求较高的数据,如音频和视频流。
  3. 简单性和轻量级:UDP的协议设计相对简单,头部开销较小。它不需要维护复杂的连接状态和缓冲区,因此在处理大量数据包时具有较低的处理负担。这对于网络设备和高负载的服务器来说是一个优势,特别是在高丢包率的环境中。
  4. 灵活性:UDP允许发送方以快速的速度发送数据包,而不需要等待接收方的确认。这使得UDP更适合于一些实时应用,如音频和视频流,其中时间敏感性更重要,而对于丢失一些数据包的情况可以进行容忍或通过其他方式进行纠正。

尽管UDP具有这些优点,但也存在一些限制和风险。UDP不提供可靠性保证、流控制和拥塞控制,因此在应用中需要自行处理这些问题。此外,由于UDP不保证数据包的顺序和完整性,应用层需要自行处理数据包的排序和丢失问题。因此,在选择使用UDP时,需要根据具体的应用需求和网络环境来权衡利弊。