http1.0 和HTTP1.1的一些区别
- 长连接
在HTTP1.1中默认开启Connection:
keep-alive
,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
- 缓存处理
http1.0 主要使用header中的Exprires, If-Modified-Since来做为缓存判断的标准
HTTP1.1 Entity tag,If-Unmodified-Since, If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了
range头域
,它允许只请求资源的某个部分,即返回码是206(Partial Content)
- Host头处理
在HTTP/1.0中认为每台服务器都有唯一的IP地址,但随着虚拟主机技术的发展,多个主机共享一个IP地址愈发普遍,HTTP1.1的请求消息和响应消息都应支持
Host头域
,且请求消息中如果没有Host头域会400错误
http2
- 二进制传输
HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。
帧
是数据传输的最小单位,以二进制传输代替原本的明文传输,原本的报文消息被划分为更小的数据帧。
- 多路复用
在一个TCP连接上,可以不断发送数据帧,每帧的stream identifier 标明这一帧属于哪个流,然后对方接收时,根据stream identifier拼接每个流的所有帧组成一整块数据
- header压缩
使用
HPACK
算法压缩header内容
- 服务端推送
浏览器发送一个请求,服务器主动向浏览器推送与此请求相关资源,这样浏览器就不用发起后续请求了(Server Push,也叫 Cache push)
http3
- 实现了类似TCP的流量控制、传输可靠性功能
- 集成了TLS加密功能
- 实现了多路复用,QUIC实现了在同一物理连接上可以有多个独立的逻辑数 据流(如下图)。实现了数据流的单独传输,就解决了TCP中队头阻塞的问题