【2025最新面试八股常问知识点】HTTP1.0,HTTP1.1,HTTP2.0,HTTP3.0,HTTP的进化之路。
HTTP
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP 协议是以 ASCII 码传输,基于请求与响应模式的、无状态的,建立在 TCP/IP 协议之上的应用层规范。。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTP协议主要的版本有4个,分别是HTTP/1.0、HTTP/1.1、HTTP/2和HTTP3.0HTTPS是另外一个协议,简单讲是HTTP的安全版。可以看我的另一篇博客
【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的-CSDN博客
https://blog.csdn.net/gwndjsh/article/details/147373157?spm=1001.2014.3001.5501
1. HTTP/1.0(1996年)
HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
-
核心特点:
-
短连接:每个请求/响应后立即关闭TCP连接,导致高延迟(需频繁三次握手)。
-
无状态:服务器不记录客户端状态(依赖Cookie等机制扩展)。
-
基础功能:支持
GET
、POST
、HEAD
方法,通过Content-Type
支持多种数据类型(如HTML、图片)。
-
-
典型问题:
-
-
TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。现在,随便打开一个网页,上面都会有很多图片、视频等资源,HTTP/1.0显然无法满足性能要求。
每个资源(如图片、CSS)需单独建立连接,页面加载效率极低。
-
2. HTTP/1.1(1997年,主流版本)
最主要的改进就是引入了持久连接。所谓的持久连接就是:在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
-
核心改进:
-
持久连接(Keep-Alive):默认复用TCP连接,减少握手开销(通过
Connection: keep-alive
)。 -
管道化(Pipelining):允许客户端发送多个请求而不需等待响应(但服务器必须按顺序返回,易队头阻塞)。
-
分块传输(Chunked Transfer):支持流式传输(
Transfer-Encoding: chunked
)。 -
缓存控制:引入
Cache-Control
、ETag
等头部优化缓存策略。 -
Host头:支持虚拟主机(单IP托管多域名)。
-
-
遗留问题:
-
队头阻塞(Head-of-Line Blocking):一个慢请求会阻塞后续请求。对于管道连接还是有一定的限制和要求的,其中一个比较关键的就是服务端必须按照与请求相同的顺序回送HTTP响应。这也就意味着,如果一个响应返回发生了延迟,那么其后续的响应都会被延迟,直到队头的响应送达。这就是所谓的HTTP队头阻塞。
-
头部冗余:每次请求携带大量重复头部(如Cookie)。
-
SPDY(过度时期)
虽然,HTTP/1.1在HTTP/1.0的基础上提供了持久连接,提升了很大的效率,但是,还是有很大的提升空间。
正所谓时势造英雄,正是因为HTTP存在着诸多不足,所以,才诞生了SPDY。2009年,谷歌公开了自行研发的 SPDY 协议,主要解决 HTTP/1.1 效率不高的问题。它的设计目标是降低 50% 的页面加载时间。SPDY主要提供了以下功能(后文介绍HTTP2的时候再详细介绍):
●多路复用(multiplexing)。多个请求共享一个tcp连接。
●header压缩。删除或者压缩HTTP头
●服务端推送。提供服务方发起通信,并向客户端推送数据的机制。
SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议。
3. HTTP/2.0(2015年,革命性升级)
HTTP/2主要是解决HTTP中存在的效率问题。它主要引入了二进制分帧、多路复用、header压缩、以及服务端推送的新特性,大大的提升了效率。
而且,在HTTP/2中还解决了一个重要的问题,那就是HTTP的队头阻塞问题。
-
核心改进:
-
二进制协议:替换文本格式,帧(Frames)和流(Streams)提高解析效率。主要是HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码。这种单连接多资源的方式,减少了服务端的压力,使得内存占用更少,连接吞吐量更大。而且,TCP连接数的减少使得网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快。
-
多路复用(Multiplexing):单连接并行传输多个请求/响应,彻底解决队HTTP头阻塞。多路复用允许同时通过单一的HTTP/2.0连接发起多重的请求-响应消息。
-
头部压缩(HPACK):减少冗余头部体积(专为HTTP设计的压缩算法)。HTTP/1.1的header带有大量信息,而且每次都要重复发送。HTTP/2 为了减少这部分开销,采用了HPACK 头部压缩算法对Header进行压缩。
-
服务器推送(Server Push):服务器可主动推送资源(如CSS/JS)到客户端缓存。简单来讲就是当用户的浏览器和服务器在建立连接后,服务器主动将一些资源推送给浏览器并缓存起来的机制。有了缓存,当浏览器想要访问已缓存的资源的时候就可以直接从缓存中读取了。
-
流优先级:允许设置请求优先级(如优先加载HTML而非图片)。
-
-
局限:
-
仍基于TCP,可能受TCP队头阻塞影响(如丢包时重传阻塞所有流)。只能说HTTP/2解决了HTTP的队头阻塞问题,但是并没有解决TCP队头阻塞问题!
-
部署复杂度高(需TLS加密,依赖ALPN协商)。
-
-
关于怎么解决的HTTP头阻塞为问题
-
在HTTP1.1中的HTTP头阻塞是因为管道化的设计方式造成的。HTTP/2废弃了管道化的方式,而是创新性的引入了帧、消息和数据流等概念。客户端和服务器可以把 HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。因为没有顺序了,所以就不需要阻塞了,就有效的解决了HTTP队头阻塞的问题。
-
-
关于TCP头阻塞的问题(发生原因)
-
因为TCP传输过程中会把数据拆分为一个个按照顺序排列的数据包,这些数据包通过网络传输到了接收端,接收端再按照顺序将这些数据包组合成原始数据,这样就完成了数据传输。但是如果其中的某一个数据包没有按照顺序到达,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。这就发生了TCP队头阻塞。
HTTP/1.1的管道化持久连接也是使得同一个TCP链接可以被多个HTTP使用,但是HTTP/1.1中规定一个域名可以有6个TCP连接。而HTTP/2中,同一个域名只是用一个TCP连接。
所以,在HTTP/2中,TCP队头阻塞造成的影响会更大,因为HTTP/2的多路复用技术使得多个请求其实是基于同一个TCP连接的,那如果某一个请求造成了TCP队头阻塞,那么多个请求都会受到影响。
-
-
放弃TCP(推荐)或者升级TCP(不推荐)
-
放弃TCP好理解和跟下面的HTTP3一样,但是升级TCP的时候,这就涉及到一个”协议僵化“的问题。需要考虑中间层的问题,中间设备是指插入在数据终端和信号转换设备之间,完成调制前或解调后某些附加功能的辅助设备。例如集线器、交换机和无线接入点、路由器、安全解调器、通信服务器等都是中间设备。一个网络需要经过无数个中间设备的转发才能到达终端用户。操作系统也是一个重要的因素,因为TCP协议需要通过操作系统内核来实现,而操作系统的更新也是非常滞后的。所以,这种问题就被称之为”中间设备僵化”,也是导致”协议僵化”的重要原因。这也是限制着TCP协议更新的一个重要原因。
-
4. HTTP/3.0(2022年正式标准,基于QUIC(应该是属于传输层),这是一种完全基于UDP的协议)
我们知道,HTTP/2之所以"被弃用",是因为他使用的传输层协议仍然是TCP,所以HTTP/3首要解决的问题就是绕开TCP,像上面所说如果改造TCP协议的话那么同样还是会因为受到中间设备僵化的影响,导致无法被大规模应用。所以,研发人员们想到了一种基于UDP实现的方式
-
QUIC协议有以下特点:
●基于UDP的传输层协议:它使用UDP端口号来识别指定机器上的特定服务器。
●可靠性:虽然UDP是不可靠传输协议,但是QUIC在UDP的基础上做了些改造,使得他提供了和TCP类似的可靠性。它提供了数据包重传、拥塞控制、调整传输节奏以及其他一些TCP中存在的特性。
●实现了无序、并发字节流:QUIC的单个数据流可以保证有序交付,但多个数据流之间可能乱序,这意味着单个数据流的传输是按序的,但是多个数据流中接收方收到的顺序可能与发送方的发送顺序不同!
●快速握手:QUIC提供0-RTT(零往返时间)和1-RTT(单往返时间)的连接建立
●使用TLS 1.3传输层安全协议:与更早的TLS版本相比,TLS 1.3有着很多优点,但使用它的最主要原因是其握手所花费的往返次数更低,从而能降低协议的延迟。
-
优势场景:
-
高延迟网络(如移动端)、频繁切换网络的场景。
-
对实时性要求高的应用(如视频会议、在线游戏)。
-
版本对比总结
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2.0 | HTTP/3.0 |
---|---|---|---|---|
连接方式 | 短连接 | 持久连接 | 多路复用 | QUIC多路复用 |
传输协议 | TCP | TCP | TCP | UDP(QUIC) |
头部压缩 | 无 | 无 | HPACK | QPACK |
队头阻塞 | 严重 | 管道化仍存在 | TCP层存在 | 完全解决 |
服务器推送 | 不支持 | 不支持 | 支持 | 保留但使用率低 |
典型应用 | 早期静态页面 | 现代Web(兼容模式) | 主流高性能Web | 移动端/实时应用 |
演进背后的核心目标
-
性能优化:减少延迟(从短连接到QUIC)、提高吞吐量(多路复用)。
-
安全性:从明文(HTTP/1.0)到强制HTTPS(HTTP/2+)。
-
适应新场景:从静态页面到动态应用(SPA)、实时流媒体。
实际建议
-
兼容性优先:多数服务仍支持HTTP/1.1(如CDN回源)。
-
性能敏感场景:启用HTTP/2(需TLS)或HTTP/3(如Cloudflare、Google服务已支持)。
-
未来趋势:HTTP/3将逐步普及,但需客户端/服务器/网络设备全面支持。