Skip to content

HTTP1.0/1.1/2.0 的区别

HTTP1.0

HTTP 1.0浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接

服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求,每次与服务器交互,都需要新开一个连接 HTTP1.0

HTTP1.1

HTTP1.1中,默认支持长连接(Connection: keep-alive)(使用Connection: keep-alive头部字段),即在一个TCP连接上可以传送多个HTTP请求和响应,允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,减少了建立和关闭连接的消耗和延迟
建立一次连接,多次请求均由这个连接完成HTTP1.1 但是,同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着

HTTP2.0

HTTP2.0性能上有很大的提升,添加了以下特性:

多路复用

HTTP2复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”

二进制分帧

HTTP2采用二进制格式传输数据,而非HTTP 1.x的文本格式,解析起来更高效,将请求和响应数据分割为更小的帧,并且它们采用二进制编码

HTTP2中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流

每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装,这也是多路复用同时发送数据的实现条件

首部压缩

HTTP2 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,首部表在 HTTP/2 的连接存续期内始终存在,由客户端和服务器共同渐进地更新,对于相同的数据,不再通过每次请求和响应发送
例如:下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销 首部压缩

服务器推送

HTTP2引入服务器推送,允许服务端推送资源给客户端
服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取 服务器推送

HTTP3.0

HTTP/3.0HTTP协议的最新版本,旨在解决HTTP/2.0中的一些性能和安全问题。HTTP/3.0基于QUIC协议,而不是传统的TCP协议。

具有以下特性:

基于 QUIC 协议

QUIC(Quick UDP Internet Connections)是一个基于UDP的传输层协议,旨在提供更快的连接建立和更好的性能
QUIC集成了TLS加密,提供了更快的加密握手过程

多路复用

  • QUIC使用独立的流控制,每个流都有独立的拥塞控制和丢包恢复机制。这意味着一个流的丢包不会影响其他流的数据传输
  • QUIC使用帧来传输数据,每个数据包可以包含多个帧。丢失的数据包只会影响该数据包中的帧,而不会影响其他数据包,只需重传相关的帧,而不会影响其他帧。这与TCP不同,TCP会因为丢包而阻塞整个连接

快速连接建立

  • QUIC使用0-RTT(零往返时间)握手,可以在初次连接时减少延迟
  • 通过减少握手次数,HTTP/3.0提供了更快的连接建立速度

内置加密

  • QUIC协议内置了TLS 1.3加密,确保了数据传输的安全性。
  • 由于加密是协议的一部分,HTTP/3.0 默认是加密的。

如有转载或 CV 的请标注本站原文地址