HTTP1.0/1.1/2.0 的区别
HTTP1.0
HTTP 1.0
浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP
连接
服务器完成请求处理后立即断开TCP
连接,服务器不跟踪每个客户也不记录过去的请求,每次与服务器交互,都需要新开一个连接
HTTP1.1
在HTTP1.1
中,默认支持长连接(Connection: keep-alive)
(使用Connection: keep-alive
头部字段),即在一个TCP
连接上可以传送多个HTTP
请求和响应,允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,减少了建立和关闭连接的消耗和延迟
建立一次连接,多次请求均由这个连接完成 但是,同一个TCP
连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着
HTTP2.0
HTTP2.0
性能上有很大的提升,添加了以下特性:
多路复用
HTTP2
复用TCP
连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”
二进制分帧
HTTP2
采用二进制格式传输数据,而非HTTP 1.x
的文本格式,解析起来更高效,将请求和响应数据分割为更小的帧,并且它们采用二进制编码
HTTP2
中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流
每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装,这也是多路复用同时发送数据的实现条件
首部压缩
HTTP2
在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,首部表在 HTTP/2 的连接存续期内始终存在,由客户端和服务器共同渐进地更新,对于相同的数据,不再通过每次请求和响应发送
例如:下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销
服务器推送
HTTP2
引入服务器推送,允许服务端推送资源给客户端
服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取
HTTP3.0
HTTP/3.0
是HTTP
协议的最新版本,旨在解决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
默认是加密的。