当前位置: 首页 > news >正文

【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等机制扩展)。

    • 基础功能:支持GETPOSTHEAD方法,通过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-ControlETag等头部优化缓存策略。

    • 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.0HTTP/1.1HTTP/2.0HTTP/3.0
连接方式短连接持久连接多路复用QUIC多路复用
传输协议TCPTCPTCPUDP(QUIC)
头部压缩HPACKQPACK
队头阻塞严重管道化仍存在TCP层存在完全解决
服务器推送不支持不支持支持保留但使用率低
典型应用早期静态页面现代Web(兼容模式)主流高性能Web移动端/实时应用

演进背后的核心目标

  1. 性能优化:减少延迟(从短连接到QUIC)、提高吞吐量(多路复用)。

  2. 安全性:从明文(HTTP/1.0)到强制HTTPS(HTTP/2+)。

  3. 适应新场景:从静态页面到动态应用(SPA)、实时流媒体。


实际建议

  • 兼容性优先:多数服务仍支持HTTP/1.1(如CDN回源)。

  • 性能敏感场景:启用HTTP/2(需TLS)或HTTP/3(如Cloudflare、Google服务已支持)。

  • 未来趋势:HTTP/3将逐步普及,但需客户端/服务器/网络设备全面支持。

相关文章:

  • TI---sysconfig生成宏
  • PyQt6实例_消息工具_使用与完整代码分享
  • 牛客:BM1 反转链表
  • 4.26 数据交互升级引入配置文件
  • JBoss Web 安全问题实战总结(Session / CSP / Host Header)
  • threejs 零基础学习day01
  • Tauri文件系统操作:桌面应用的核心能力(入门系列四)
  • 深入理解N皇后问题:从DFS到对角线优化
  • Linux | Mfgtools 修改单独只烧写 Uboot,内核,文件系统
  • 用python写一个相机选型的简易程序
  • 视觉大模型专栏导航
  • 可视化大屏开发前提了解
  • MySQL 分布式架构与实战:从单机到集群的进阶之路(附生产级架构设计)
  • Spring AI Alibaba - Milvus 初体验,实现知识库效果
  • QT6 源(51)篇一:存储 c 语言字符串的类 QByteArray 的使用举例,采用 ascii 码字符集。函detach()的调用时机,
  • 【SSH 端口转发】通过SSH端口转发实现访问远程服务器的 tensorboard
  • 学习笔记——《Java面向对象程序设计》-内部类、匿名类、异常类
  • rsync+ Rocky Linux 主机同步部署实战
  • 4月26日星期六今日早报简报微语报早读
  • 创建可执行 JAR 文件
  • 王庆成:儒家、墨家和洪秀全的“上帝”
  • 中公教育:去年全面扭亏,经营性现金流增长169.6%
  • 靳燕出任中央戏剧学院党委副书记,原任中戏院长助理
  • 建投读书会·东西汇流|全球物品:跨文化交流视域下的明清外销瓷
  • 国家数据发展研究院在京正式揭牌
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯