http1.0,http1.1和http2.0区别
http1.0:
- 一个TCP连接只可以发送一个http请求
- 请求只能由客户端发起
- 请求报文和响应报文首部信息冗余量大
http1.1:
- 增加持久连接Connection: keep-alive,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持。
- 每个域名最多同时建立6个TCP持久连接
- 引入Cookie机制
- 对动态生成的内容提供了完美支持,通过引入Chunk transfer 机制来解决这个问题,服务器会将数据分割成若干个任意大小的数据块,每个数据块发送时会附上上个数据块的长度,最后使用一个零长度的块作为发送数据完成的标志。这样就提供了对动态内容的支持。
- 提供虚拟主机的支持,请求头增加Host字段,表示当前的域名地址,这样服务器就可以根据不同的 Host 值做不同的处理。
- 带宽利用率低,100M带宽,实际下载速度最多12.5M/S。原因:TCP慢启动,发送数据类似于汽车提速0-100km/h;同时开启多条TCP连接,这些连接会竞争固定的带宽;队头阻塞,持久连接虽然能公用一个TCP管道,但是一个管道同一时刻只能处理一个http请求。
http2:
HTTP/2 使用了多路复用技术,可以将请求分成一帧一帧的数据去传输,这样带来了一个额外的好处,就是当收到一个优先级高的请求时,比如接收到 JavaScript 或者 CSS 关键资源的请求,服务器可以暂停之前的请求来优先处理关键资源的请求。
- 多路复用机制,实现资源的并行传输,多路复用是通过在协议栈中添加二进制分帧层来实现的,有了二进制分帧层还能够实现请求的优先级、服务器推送、头部压缩等特性,从而大大提升了文件传输效率。
- 使用 CDN 的实现域名分片机制。
- 服务器推送
- 头部压缩,对请求头和响应头压缩
- 可以设置请求优先级
- 建立 TCP 连接的延时
- TCP 协议僵化
- 实现了类似 TCP 的流量控制、传输可靠性的功能。虽然 UDP 不提供可靠性的传输,但 QUIC 在 UDP 的基础之上增加了一层来保证数据可靠性传输。它提供了数据包重传、拥塞控制以及其他一些 TCP 中存在的特性。
- 集成了 TLS 加密功能。目前 QUIC 使用的是 TLS1.3,相较于早期版本 TLS1.3 有更多的优点,其中最重要的一点是减少了握手所花费的 RTT 个数。
- 实现了 HTTP/2 中的多路复用功能。和 TCP 不同,QUIC 实现了在同一物理连接上可以有多个独立的逻辑数据流(如下图)。实现了数据流的单独传输,就解决了 TCP 中队头阻塞的问题。