当谈到网络通信协议时,大家都熟悉的就是HTTP(Hypertext Transfer Protocol),它是一种用于在 Web 浏览器和服务器之间传输数据的协议。随着技术的发展,HTTP也在不断演进,从HTTP1.0发展到了HTTP2.0,带来了许多新的特性和改进。
一、如何通过浏览器查看当前的http版本:
谷歌:
火狐:
二、HTTP协议层次结构图
现在主流浏览器大部分使用的都是HTTP/1.1协议,也有部分支持HTTP/2.0;绝大部分网站都升级为HTTPS更保证安全性
三、HTTP1.0和HTTP2.0的区别
1. 连接复用:
HTTP1.0:每个HTTP请求都需要建立一个新的TCP连接,请求结束后立即关闭连接。这样的方式会导致每个请求都需要重新建立连接,增加了延迟和开销。
HTTP2.0:引入了多路复用技术,允许在同一个TCP连接上并发(发送多个请求和响应),避免了建立和关闭多个连接的开销,提高了性能和效率。
原理实现:
HTTP/2
引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据,这就是流所做的事情,这些帧在传输完成后根据ID组合成对应的数据。
2. 请求-响应方式:
HTTP1.0:采用的是单向请求-响应模式,即每个请求只能对应一个响应,请求和响应是一一对应的关系。
HTTP2.0:引入了Server Push机制,服务器可以在客户端请求之前主动推送相关资源,避免了客户端重复请求的等待时间,提高了页面加载速度。
3. 头部压缩:
HTTP1.0:每个请求和响应的头部都包含大量的重复信息,造成了较大的网络传输开销。
HTTP2.0:使用了HPACK算法对头部进行压缩,减少了头部的大小,降低了网络传输开销。
4. 二进制协议:
HTTP1.0:采用文本形式进行数据传输,易于阅读和调试,但是传输效率较低。
HTTP2.0:采用二进制格式传输数据,减少了解析的复杂性,提高了传输效率。
5. 流控制和优先级:
HTTP1.0:没有流控制和优先级的概念,所有请求都是按照发送的顺序进行处理。
HTTP2.0:引入了流控制和优先级的机制,可以根据需求对请求进行优先级排序和流量控制,确保重要请求的及时处理。
6. 长连接支持:
HTTP1.0:基本上都是短连接,每个请求响应完成后立即关闭连接。
HTTP2.0:支持长连接,即一个TCP连接可以承载多个请求和响应,减少了连接的建立和关闭次数,提高了性能。
四、HTTP1.1的致命缺点
1.明文传输,安全性不高
2.当有多个请求同时被挂起时,就会拥塞请求通道,导致后面请求无法发送(没有真正的解决队头阻塞,多条TCP连接竞争带宽)
3.臃肿的消息首部:HTTP/1.1能压缩请求内容,但是消息首部不能压缩(消息首部占请求绝大部分)
五、相比于HTTP1.1,HTTP2.0的主要优点
a.HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接
b.采用二进制帧封装(HTTP2.0会将所有传输的信息分割为更小的消息和帧,采用二进制的格式进行编码;HTTP1.x的解析是基于文本的)
c.传输变成多路复用(HTTP2.0所有的请求都是通过一个 TCP 连接并发完成;HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞)
d.服务器端推送(HTTP2.0引入了Server Push机制,服务器可以在客户端请求之前主动推送相关资源)
e.头部压缩(HTTP2.0使用了HPACK算法对头部进行压缩,网络上传输更快)
f.流控制和优先级(HTTP2.0对请求进行优先级排序和流量控制,确保重要请求的及时处理)
g.流量控制算法优化
六、HTTP/3.0(持续完善中)
基于Google的QUIC,HTTP3 背后的主要思想是放弃 TCP,转而使用基于 UDP 的 QUIC 协议。
为了解决HTTP/2.0中TCP造成的队头阻塞问题,HTTP/3.0直接放弃使用TCP,将传输层协议改成UDP;但是因为UDP是不可靠传输,所以这就需要QUIC实现可靠机制
QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。
QUIC 也是需要三次握手来建立连接的,主要目的是为了确定连接 ID。
总结:
HTTP2.0相对于HTTP1.0在性能和效率上有了明显的改进。通过连接复用、多路复用、头部压缩、Server Push等特性,HTTP2.0在传输速度、网络资源利用率和用户体验方面都有了显著的提升。然而,要注意的是,HTTP2.0在某些特定的网络环境下可能会遇到兼容性问题,需要进行适当的配置和优化。
随着互联网的不断发展,HTTP协议也在不断演进,HTTP3(基于UDP的QUIC协议)已经出现,并带来了更多的改进。了解并掌握不同版本的HTTP协议对于开发者来说是非常重要的,可以根据具体的业务场景和需求选择合适的协议版本,以提供更好的用户体验和性能。
标签:HTTP1.0,HTTP1.1,HTTP,请求,TCP,连接,HTTP2.0 From: https://www.cnblogs.com/beatle-go/p/17918358.html