HTTP是什么
HTTP(HyperText Transfer Protocol,超文本传输协议)是基于请求-响应模型用于在Web浏览器和Web服务器之间传输超文本(如HTML)的一种应用层协议。它是互联网的基础协议之一,定义了客户端与服务器之间的通信规则,使得用户能够访问和浏览互联网上的各种资源,如网页、图片、视频等。
HTTP的发展历程
- http 0.9 1992
- http 1.0 1996
- http 1.1 1997
- http/2 2015年
- http/3 2022年
HTTP/1
http协议是基于tcp协议,每次请求都需要建立tcp连接。其中在 HTTP 1.1 中引入了 keep-alive 和 Pipeline 的一些技术。
域名分片
为了提升web页面加载性能,浏览器通常允许为每个域名至多建立6个tcp连接通道。但开发人员仍想要获得更大的性能提升,于是web页面中的资源分成多个域名。
缓存
HTTP缓存控制是Web性能优化的重要部分,通过合理的缓存策略,可以显著减少网络请求次数,降低服务器负载,提高页面加载速度。HTTP缓存控制主要通过HTTP头部字段来实现,这些字段控制缓存的行为,定义缓存的有效期和验证机制。策略主要有:
- Cache-Control
- Expires
- ETag
- Last-Modified
- Pragma
- Age
压缩
减少传输内容提及能有效提升传输性能,设计2个header
- Accept-Encoding: 表示我支持哪些压缩算法
- Content-Encoding: 用于表示内容采用的压缩算法
HTTP/2
HTTP/1.1的队头阻塞、冗长的头信息和单一连接的限制,已经难以满足现代Web应用对高性能和低延迟的需求。因此,HTTP/2应运而生。HTTP/2由IETF于2015年正式发布,旨在解决HTTP/1.1的性能瓶颈。
主要改进
- 二进制分帧:HTTP/2使用二进制分帧层将数据帧化,降低了解析开销,提高了传输效率。
- 多路复用:允许在一个TCP连接上并行发送多个请求和响应,消除了队头阻塞问题。
- 头信息压缩:通过HPACK算法对头信息进行压缩,减少了传输的数据量。
服务器推送:服务器可以主动推送资源到客户端,减少了请求的延迟。
http/2基于二进制分帧,可以为每个请求设定独立的id,从而实现可以不按顺序地发送多个请求。(网页的各种资源就不需要多个域名了,可以在同一个域名下并发请求获取数据)
HTTP/2未解决的问题
尽管HTTP/2大大改善了性能,但它本质还是基于TCP协议,依然存TCP的队头阻塞问题:HTTP/2在一个TCP连接上进行多路复用,如果底层TCP连接出现丢包或延迟,所有的并行流都会受到影响。
HTTP/3
为了彻底解决HTTP/2的队头阻塞问题,HTTP/3引入了基于UDP的QUIC协议。QUIC在设计之初就考虑了减少延迟和提高传输效率。
主要改进
-
基于UDP的QUIC协议:QUIC通过使用UDP而非TCP,避免了TCP的队头阻塞问题。每个QUIC流都是独立的,即使某个流丢包或延迟,不会影响其他流的传输。
-
快速握手:QUIC减少了连接建立的时间,通过集成TLS进行加密,首次连接只需要一次RTT(往返时间),后续连接则可以实现零RTT。
-
改进的拥塞控制:QUIC内置了先进的拥塞控制算法,更加高效地利用网络资源,提升了传输速度和稳定性。
总结
HTTP协议的每一次演进都旨在解决前一版本的不足,提高传输效率和用户体验。
- HTTP/1.1通过持久连接和管道化提升了性能
- HTTP/2通过二进制分帧和多路复用解决了许多性能瓶颈
- HTTP/3通过引入QUIC协议进一步解决了队头阻塞问题,并显著降低了延迟