news 2026/4/15 13:47:14

HTTP 协议发展整理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HTTP 协议发展整理

每次发展都是在优化和解决上一代协议存在的问题,并拓展新功能。

HTTP/0.9(1991 年)

HTTP/0.9 是最初的版本,功能非常简单:

  • 只能请求页面:规定服务器只能发送 HTML 和字符串。
  • 单一请求方法:只支持 GET 请求。
  • 无状态码:没有状态码和错误处理机制。
  • 无头部信息:请求和响应都没有头部字段。

HTTP/1.0(1996 年)

HTTP/1.0 是第一个广泛使用的版本,引入了多项重要特性:

  • 支持多种内容类型:通过Content-Type头部增加了图像、视频、二进制文件的传输。
  • 新增请求方法:支持 POST 和 HEAD 请求。
    • HEAD:仅返回响应头部,不返回响应数据。
  • 引入缓存机制:通过ExpiresLast-Modified等头部实现缓存。
  • 引入状态码:如 200(成功)、404(未找到)、500(服务器错误)等。

存在问题

  • TCP 连接只服务于单次数据发送:每次请求都需要建立新的 TCP 连接,请求完成后立即断开,导致需要频繁连接和中断,性能开销大。

HTTP/1.1(1997 年标准化)

HTTP/1.1 是 HTTP/1.0 的改进版本,解决了 1.0 的主要问题并引入了多项新特性。

  • 支持持久连接:使 TCP 连接可以多次复用,解决了 HTTP/1.0 频繁建立连接的问题。通过Connection: keep-alive头部控制连接复用。
  • 引入管道机制:允许多个请求同时发送,不必等待上个请求结果返回。但服务端仍按顺序返回请求,还是会存在队头阻塞问题。后续浏览器仅支持了 4-8 个并发连接。
  • 断点续传和分块传输:支持RangeContent-Range头部,可以按照对应文件块进行发送。完成响应200 OK,未完成响应206 Partial Content
  • 引入 Cookie 头部字段:新增 Cookie 字段,解决无状态协议下的用户登录状态缓存问题。
  • 新增请求方法
    • PUT:更新资源。
    • PATCH:部分更改资源,类似于部分版的 PUT。
    • DELETE:删除指定资源。
    • OPTIONS:询问服务器支持的请求方法、请求类型、请求头,用于 CORS 预检请求。

HTTP/2(2015 年标准化)

HTTP/2 是对 HTTP/1.1 的重大改进,主要解决性能问题。

  • 二进制分帧:在应用层和传输层之间新增了二进制分帧层,采用二进制提高数据处理速度,将传输信息分帧,并使用二进制编码进行封装。

帧分为头信息帧数据帧

  • 多路复用
    • 允许同时发起多个请求,且无需按顺序返回,解决了 HTTP/1.1 的管道机制问题。
    • 每个请求/响应构建成数据流,每个数据流分成许多二进制帧,二进制帧通过stream_id区分自己属于哪个数据流。这样只需要通过单个 TCP 连接就可以传输所有请求数据,避免了队头阻塞的问题,实现并行传输,绕过浏览器的连接数限制
  • 头部压缩:使用 HPACK 算法,客户端和服务器同时维护一张头信息表,在互相发送时只传递表字段索引号,减少数据重复传输的成本。头信息通过 gzip 压缩后再发送。
  • 服务端推送支持:支持服务器主动推送资源到客户端,减少客户端请求次数。主要用于推送静态资源,如 CSS、JavaScript 等。

注意:这里的服务端推送不是指 SSE(Server-Sent Events),SSE 实际是基于 HTTP/1.1 的技术,这里指的是 Server Push 技术,配合 Push Cache 可以实现特有的缓存机制,浏览器请求文件时,服务器会把相关的文件也推送给客户端,后续客户端发起请求时,会检查 memory、disk,如果都没有命中检查 Push Cache,命中后会直接读取,在 Chrome Dev Tools NetWork 中 Initiator 会显示Push,Size 会显示Push Cache。Push Cache 可以通过 nginx 开启。

HTTP/3(2022 年标准化)

HTTP/3 是基于 QUIC 协议的 HTTP 版本,主要解决传输层的问题。

  • QUIC 协议(Quick UDP Internet Connections):QUIC 是基于 UDP 的传输协议,解决了 TCP 传输层协议的问题。
  • 解决 TCP 层队头阻塞问题
    • TCP 协议单个连接内丢包时,会触发重传机制,阻塞同个连接后面的请求。
    • QUIC 支持同时运行多个数据流,数据流丢包只会阻塞当前数据流,不会影响其他流。
  • 缩短连接时间:不存在三次握手,第一个包就可以包含业务数据,使用 DH(Diffie-Hellman)密钥交换算法(Diffie-Hellman)。
  • 连接迁移
    • 不受四元组影响:客户端IP、客户端Port、服务端IP、服务端Port
    • 四元组其中一个变化后,连接不会异常,仍然可以保持正常连接。使用 64 位随机数Connection ID进行连接操作,网络变化后仍稳定。
  • 前向纠错(FEC):通过数据和额外信息进行发送,在单个包出错时,会通过其他包和 FEC 推算出出错包的数据来进行纠错,进行恢复操作。

思考

1. 为什么现在大部分流行的还是 HTTP/2 协议,或者是说 2021 年左右才开始普及?

在企业级项目中,技术选型通常优先考虑稳定性和生态成熟度。

虽然 HTTP/2 在 2015 年已完成标准化,并且浏览器端很早就支持,但由于服务端基础设施升级成本、工程实践复杂度和 HTTP/1.1 足够用的特性,通常不会随意升级 HTTP 协议。

在 2020 年后,云厂商与 CDN 逐步将 HTTP/2 设为默认选项,在后续部署成本显著降低。

加之 HTTP/3 的出现,突显了 HTTP/2 技术成熟与稳定,HTTP/2 才在近几年成为企业项目中的主流协议选择。

总结

  • HTTP/0.9:最初版本,只支持 GET 请求,只能传输 HTML。
  • HTTP/1.0:引入多种内容类型、缓存、状态码,但存在频繁建立连接的问题。
  • HTTP/1.1:支持持久连接、管道机制、断点续传、Cookie,但仍存在队头阻塞问题。
  • HTTP/2:二进制分帧、多路复用、头部压缩,解决了应用层队头阻塞问题。
  • HTTP/3:基于 QUIC 协议,解决传输层队头阻塞问题,支持连接迁移、前向纠错。

演进方向

  • 性能优化:从单次连接到持久连接,从串行到并行传输。

    • HTTP/0.9:单次连接,每次请求都需要建立新的 TCP 连接。
    • HTTP/1.0:单次连接,请求完成后立即断开。
    • HTTP/1.1:支持持久连接(Connection: keep-alive),TCP 连接可以多次复用,同时引入管道机制,允许多个请求同时发送(但仍存在队头阻塞)。
    • HTTP/2:多路复用,通过单个 TCP 连接传输所有请求数据,实现并行传输。
    • HTTP/3:基于 QUIC 协议,支持多数据流并行传输,解决传输层队头阻塞。
  • 传输效率:从文本协议到二进制协议,从重复传输到头部压缩。

    • HTTP/0.9 - HTTP/1.1:文本协议,头部信息重复传输。
    • HTTP/2:二进制分帧,采用二进制编码提高数据处理速度,头部压缩(HPACK 算法),通过索引表减少重复传输。
  • 功能扩展:从简单请求到支持缓存、Cookie、断点续传等。

    • HTTP/0.9:只支持 GET 请求,只能传输 HTML。
    • HTTP/1.0:引入缓存机制(ExpiresLast-Modified)、状态码。
    • HTTP/1.1:引入 Cookie 头部字段、断点续传(RangeContent-Range)、新增 PUT、PATCH、DELETE、OPTIONS 请求方法。
    • HTTP/2:服务端推送支持(Server Push),配合 Push Cache 实现特有缓存机制。

参考内容

  • HTTP/2 – O’Reilly
  • 解读 HTTP1/HTTP2/HTTP3 解读 HTTP1/HTTP2/HTTP3,HTTP/2 相比于 HTTP/1.1 - 掘金
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 10:15:19

解锁机器人仿真新姿势:CREO转URDF的5分钟快速上手指南 [特殊字符]

还在为机器人仿真中的模型转换烦恼吗?🤔 CREO转URDF其实比你想象的简单!creo2urdf这款实用工具能让你的CAD设计在5分钟内变身标准URDF模型,为机器人开发插上翅膀。 【免费下载链接】creo2urdf Generate URDF models from CREO mec…

作者头像 李华
网站建设 2026/4/10 20:05:16

大模型推理服务SLA保障:从TensorRT配置入手

大模型推理服务SLA保障:从TensorRT配置入手 在当今AI应用加速落地的背景下,大语言模型(LLM)正广泛应用于智能客服、内容生成、搜索推荐等关键业务场景。然而,一个现实挑战摆在工程团队面前:如何在高并发请求…

作者头像 李华
网站建设 2026/4/11 5:46:01

Keil5破解工具下载来源可靠性评估

为什么我不再碰“Keil5破解”?一位嵌入式工程师的血泪反思 几年前,我为了赶一个毕业设计项目,在搜索引擎里输入了“Keil5破解工具下载”。三分钟后,我从某个挂着“绿色软件、无毒免杀”标签的小网站上下载了一个名为 Keil5_UV4_…

作者头像 李华
网站建设 2026/4/13 19:43:53

手把手教程:Multisim元件库下载后如何正确安装

手把手教程:Multisim元件库下载后如何正确安装 你是不是也遇到过这种情况——在用 Multisim 画电路图时,想找个常用的芯片(比如 STM32 的电源管理模块或 TI 新出的 LDO),结果翻遍了“Sources”和“Power”分类都找不到…

作者头像 李华
网站建设 2026/4/11 17:01:10

PyVRP终极指南:多行程车辆路径规划与智能调度方案

PyVRP终极指南:多行程车辆路径规划与智能调度方案 【免费下载链接】PyVRP Open-source, state-of-the-art vehicle routing problem solver in an easy-to-use Python package. 项目地址: https://gitcode.com/gh_mirrors/py/PyVRP 在现代物流配送和运输管理…

作者头像 李华
网站建设 2026/4/11 17:54:40

7大实用技巧让胡桃工具箱成为你原神游戏的得力助手

7大实用技巧让胡桃工具箱成为你原神游戏的得力助手 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao 你是否…

作者头像 李华