什么是HTTP2
HTTP 2.0是超文本传输协议的一种新版本,用于在互联网上传输数据。
HTTP 2.0是HTTP1.1的升级版本,HTTP2.0旨在提高网页加载性能和用户体验。
好搞懂HTTP2.0,你首先需要了解HTTP协议的来龙去脉
HTTP协议主要的版本有3个,分别是HTTP1.0、HTTP1.1和HTTP2。
HTTP2.0是在HTTP1.0和HTTP1.1的基础之上,改进而来。
HTTP1.0
1996年5月,HTTP1.0 版本发布,为了提高系统的效率,HTTP1.0规定浏览器与服务器只保持短暂的连接。
浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
HTTP1.0中浏览器与服务器只保持短暂的连接,连接无法复用,也就是说每个TCP连接只能发送一个请求。
我们知道TCP连接的建立需要三次握手,是很耗费时间的一个过程,所以,HTTP1.0版本的性能比较差。
现在随便打开一个网页,上面都会有很多图片、视频等资源,HTTP1.0显然无法满足性能要求。
HTTP1.1
为了解决HTTP1.0存在的缺陷,HTTP1.1于1999年诞生,相比较于HTTP/1.0来说,最主要的改进就是引入了持久连接。
所谓的持久连接就是,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
如下图所示:
HTTP1.1在长时间内是主要的HTTP协议版本,但是它也有性能问题。
比如,常见的有:
- 队头阻塞:在HTTP1.1中,一个请求必须等待前一个请求完成,这导致了队头阻塞问题,即某个请求的延迟可能会影响到其他请求。
- 文本协议:HTTP1.1使用文本协议,头部信息和数据都以文本形式传输,增加了数据传输的开销。
- 多连接:为了并行加载资源,HTTP1.1通常需要多个连接,这增加了服务器和客户端的负担。
- HTTP/1.1通信通常是明文的,容易受到窥探和中间人攻击的威胁。
以上HTTP1.1的性能问题,促使HTTP2的开发,以提高页面加载速度和用户体验。
HTTP2
1.多路复用
在HTTP1.1协议中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量的限制,超过了这个限制的请求就会被阻塞。
而多路复用允许同时通过单一的 HTTP2.0 连接发起多重的“请求-响应”消息。
如下图所示:
HTTP2的请求的TCP的connection一旦建立,后续请求以stream的方式发送。
每个stream的基本组成单位是frame(二进制帧),客户端和服务器可以把 HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。

HTTP2允许多个请求和响应同时通过单个TCP连接传输,而不像HTTP/1.1需要多个连接。
2.二进制协议
HTTP2使用二进制格式来传输数据,而不是HTTP1.1的文本格式,这减小了数据传输的开销,同时更容易解析和处理。
3.头部压缩
HTTP2支持头部字段的压缩,减小了每个请求和响应的头部大小,降低了网络带宽使用和减小了延迟。
HTTP2 为了减少这部分开销,采用了HPACK 头部压缩算法对Header进行压缩。
4.安全性
HTTP/2 通常与加密协议TLS一起使用,提高了通信的安全性,减小了窥探和中间人攻击的风险。
5.兼容性
HTTP2是HTTP1.1的升级,保留了对HTTP1.1的兼容性,如果客户端不支持HTTP2,服务器可以降级为HTTP1.1。
HTTP2总结
HTTP2的特性旨在解决HTTP1.1的性能问题,并提供更高的效率和更好的用户体验。
HTTP2 已被广泛采用,成为现代Web应用程序的标准协议,绝大多数现代浏览器和Web服务器都支持 HTTP2。
总之,HTTP/2 的特性使其成为提高Web应用程序性能和用户体验的关键协议,推动了更快、更高效的网络通信。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》