HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要区别

一句话总结

  • HTTP/1.0: 短连接,每次请求都需要建立一个新的 TCP 连接,性能较差。
  • HTTP/1.1: 长连接,默认开启 Keep-Alive,连接可复用,解决了 1.0 的大部分问题,是目前使用最广泛的版本。
  • HTTP/2.0: 二进制、多路复用,彻底解决了 1.1 的“队头阻塞”问题,大幅提升了传输性能。

对比表格(核心区别一览)

特性HTTP/1.0HTTP/1.1HTTP/2.0
连接方式短连接长连接 (Persistent)多路复用 (Multiplexing)
队头阻塞 (HOL)存在存在 (请求级别)基本解决 (单个 TCP 连接内)
协议格式文本 (ASCII)文本 (ASCII)二进制 (Binary)
Header 压缩HPACK 算法
服务器推送不支持不支持支持 (Server Push)
Host 头部可选必须必须
缓存处理Expires, Last-ModifiedCache-Control, ETag 等更完善的机制继承 1.1 并进一步优化

详细解释核心区别

下面深入探讨这些关键改变的含义和影响。

1. 连接方式的进化:从短连接到多路复用

这是三个版本之间最根本的区别,直接影响了性能。

  • HTTP/1.0: 短连接 (Short-lived Connections)

    • 工作模式: 浏览器每请求一个资源(如 HTML, CSS, JS, 图片),都需要建立一个新的 TCP 连接。请求完成后,连接立即关闭。
    • 缺点:
      • 高延迟: 每个资源的请求都包含 TCP 的三次握手和四次挥手过程,开销巨大。
      • 服务器压力大: 频繁地创建和销毁连接,对服务器资源消耗严重。
  • HTTP/1.1: 长连接 (Persistent Connections)

    • 工作模式: 默认启用 Connection: keep-alive。一个 TCP 连接在发送请求后不会立即关闭,可以被后续的多个请求复用。
    • 优点:
      • 减少延迟: 避免了重复的 TCP 握手和挥手,显著提高了加载速度。
    • 缺点 (引入了新问题):
      • 队头阻塞 (Head-of-Line Blocking): 虽然连接可以复用,但在同一个连接上,请求必须按顺序发送和接收。如果前一个请求非常耗时(例如一个大文件),后面的请求即使很小,也必须等待它完成才能被处理。这就像在超市排队结账,前面的人买了很多东西,你就得一直等。
      • Pipelining (管道化): 1.1 曾试图通过管道化技术解决部分问题(即客户端可以连续发送多个请求而不用等待响应),但由于实现复杂且容易出错(如代理服务器支持不佳),大部分浏览器默认都禁用了它。
  • HTTP/2.0: 多路复用 (Multiplexing)

    • 工作模式: 这是 HTTP/2.0 的革命性改变。它在一个 TCP 连接上,引入了流 (Stream) 的概念。每个请求和响应都作为一个独立的流,并被分解成更小的帧 (Frame)。这些帧可以交错发送,然后在另一端根据流 ID 重新组装。
    • 优点:
      • 彻底解决队头阻塞: 因为多个请求/响应可以同时在同一个连接上并行传输,一个慢请求不会阻塞其他请求。这就像超市开了多个收银台,顾客可以同时结账,互不干扰。
      • 连接效率更高: 只需建立一个 TCP 连接即可传输所有资源,最大化地利用了连接,降低了延迟。
2. 协议格式:从文本到二进制
  • HTTP/1.x: 是人类可读的文本协议。请求和响应的报文都是纯文本字符串,例如:

    GET /index.html HTTP/1.1
    Host: example.com
    User-Agent: curl/7.64.1
    
    • 缺点: 格式不紧凑,解析起来相对慢且容易出错(比如对空格、换行的处理)。
  • HTTP/2.0: 是二进制协议。所有传输的数据都被分割成二进制编码的帧。

    • 优点:
      • 解析高效: 二进制格式解析起来更高效、更健壮,不易出错。
      • 体积更小: 为数据压缩和传输优化提供了基础。
3. Header 压缩:HPACK 算法
  • HTTP/1.x: 不会对 Header 进行压缩。每次请求,即使 Header 内容(如 Cookie, User-Agent)基本没变,也需要完整地发送一遍。当请求很多时,这会产生巨大的、不必要的流量。

  • HTTP/2.0: 使用 HPACK 算法对 Header 进行压缩。

    • 工作原理:
      1. 静态表 (Static Table): 客户端和服务器共同维护一个包含常见 Header(如 :method: GET)的静态表。
      2. 动态表 (Dynamic Table): 对于会变化的内容(如自定义 Header 或 Cookie),HPACK 会在连接中创建一个动态表,记录下已经发送过的 Header。后续请求如果包含相同的 Header,只需发送一个索引号即可。
      3. 霍夫曼编码: 对新的或未在表中的 Header 值使用霍夫曼编码进行压缩。
    • 优点: 极大地减少了请求的体积,尤其是在移动端或网络不佳的环境下,效果非常明显。
4. 服务器推送 (Server Push)
  • HTTP/1.x: 只能由客户端发起请求,服务器被动响应。典型的流程是:浏览器请求 HTML -> 解析 HTML -> 发现需要 CSS 和 JS -> 再分别发起对 CSS 和 JS 的请求。

  • HTTP/2.0: 允许服务器主动推送资源给客户端。

    • 工作原理: 当客户端请求一个 HTML 页面时,服务器可以预测到客户端接下来肯定会需要相关的 CSS 和 JS 文件,于是在发送 HTML 的同时,主动将这些资源“推送”给客户端的缓存。当客户端解析完 HTML 准备请求这些资源时,会发现它们已经存在于本地了。
    • 优点: 减少了关键资源的请求往返时间 (RTT),加快了页面的“可交互时间”。

总结

  • HTTP/1.0 -> HTTP/1.1: 主要的飞跃是从短连接变为长连接,解决了频繁建立连接的性能瓶颈,并引入了更完善的缓存机制和 Host 头(支持了虚拟主机)。
  • HTTP/1.1 -> HTTP/2.0: 是一次彻底的性能革命。通过多路复用、二进制协议、Header 压缩和服务器推送等关键技术,根本上解决了 HTTP/1.1 的队头阻塞问题,最大化地提升了 Web 页面的加载速度和传输效率。

简单来说,HTTP 的演进史就是一部不断追求**“更快、更省、更高效”**的历史。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90313.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat 17.3 正式发布 | 现已支持达梦、金仓和 IvorySQL 数据库

🚀🚀🚀 Navicat 很高兴地宣布:Navicat 17.3 版本正式发布。此次更新包含多项突破性功能,包括新增对达梦、金仓和 IvorySQL 等数据库的支持,全面强化 AI 功能并新增阿里通义千问等 AI 大模型,同…

前端性能新纪元:Rust + WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例)

前端性能新纪元:Rust WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例) JavaScript,作为 Web 开发的基石,是动态的、灵活的,但在性能上,它也存在着天生的“软肋”。对于那些计算密…

Web前端:JavaScript find()函数内判断

🎯 find是什么?find() 是 JavaScript 数组(Array)提供的一个内置方法,用于在数组中查找第一个满足条件的元素。简单来说:它像侦探一样遍历数组,找到第一个符合条件的成员就返回它。⚙️ 核心作用…

MySQL详解三

MySQL详解三事务ACID特性原子性一致性隔离性持久性事务的隔离级别读未提交(Read Uncommitted)读已提交(Read Committed)可重复读(Repeatable Read)串行化(serializable)MVCC聚集索引的隐藏列read view锁全局…

ABQ-LLM:用于大语言模型的任意比特量化推理加速

温馨提示: 本篇文章已同步至"AI专题精讲" ABQ-LLM:用于大语言模型的任意比特量化推理加速 摘要 大语言模型(LLMs)在自然语言处理任务中取得了革命性的进展。然而,其实际应用受到巨大的内存与计算开销的限制…

kafka的shell操作

Kafka 提供了丰富的 shell 命令工具,位于 Kafka 安装目录的 bin/ 目录下(Windows 系统为 bin/windows/)。这些命令用于管理主题、生产者、消费者、分区等核心组件。以下是常用的 Kafka shell 操作大全:一、主题(Topic&…

client-go: k8s选主

快速上手 下面这个代码就是一个选主的大概逻辑 package mainimport ("context""flag""fmt"_ "net/http/pprof""os""path/filepath""time""golang.org/x/exp/rand"v1 "k8s.io/api/core/v…

为什么Java的String不可变?

为什么Java的String不可变? 场景: 你在开发多线程用户系统时,发现用户密码作为String传递后,竟被其他线程修改。这种安全隐患源于对String可变性的误解。Java将String设计为不可变类,正是为了解决这类核心问题。 1️⃣…

在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序

文章目录一、 引言二、 环境准备三、编写简单的RISC-V程序四、 编译步骤详解五、使用QEMU运行程序六、程序详解七、退出QEMU八、总结附录:QEMU中通过UTRA显示字符工作原理1、内存映射I/O原理2、add.s程序工作流程3、关键指令解析4、QEMU模拟的UART控制器5、为什么不…

R拟合 | 一个分布能看到三个峰,怎么拟合出这三个正态分布的参数? | 高斯混合模型 与 EM算法

1. 效果已知数据符合上图分布,怎么求下图的三个分布的参数mu, sigma,及每个分布的权重 lambda? 2. 代码: 高斯混合模型(Gaussian Mixture Model,简称GMM) library(mixtools) set.seed(123) # 确保结果可重复…

Excel自动分列开票工具推荐

软件介绍 本文介绍一款基于Excel VBA开发的自动分列开票工具,可高效处理客户对账单并生成符合要求的发票清单。 软件功能概述 该工具能够将客户对账单按照订单号自动拆分为独立文件,并生成可直接导入发票清单系统的标准化格式。 软件特点 这是一款体…

【自用】JavaSE--Stream流

概述获取Stream流集合的stream流集合名.stream( );collection集合List集合与Set集合都属于Collection集合,因此可以直接调用stream方法获取stream流,示例如下结果>map集合map集合存在键值对,因此无法使用该方法直接获取stream流&#xff0…

【Elasticsearch】快照与恢复功能详解

《Elasticsearch 集群》系列,共包含以下文章: 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜:性能与成本平衡原理公式解析3️⃣ ILM(Index Lifecycle Management)策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

技嘉z370主板开启vtx

技嘉z370vtx应该默认就是开启状态,虽然主板开启的vtx但是系统默认设置会导致vtx不能使用 1. 关闭hyper-V,Windows虚拟机监控程序平台,虚拟机平台 控制面板->程序->启用或关闭windows功能 2.以管理员身份运行CMD bcdedit /set hypervisorlaunchtype off 3.…

Springmvc的自动解管理

中央转发器&#xff08;DispatcherServlet&#xff09;控制器视图解析器静态资源访问消息转换器格式化静态资源管理一、中央转发器Xml无需配置<servlet><servlet-name>chapter2</servlet-name><servlet-class>org.springframework.web.servlet.Dispatc…

C#_定时器_解析

问题一:这里加lock是啥意思?它的原理是, 为什么可以锁住? private readonly Timer _timer;/// <summary>/// 构造函数中初始化定时器/// </summary>public FtpTransferService(){// 初始化定时器_timer new Timer(_intervalMinutes * 60 * 1000);_timer.Elapsed…

Trae开发uni-app+Vue3+TS项目飘红踩坑

前情 Trae IDE上线后我是第一时间去使用体验的&#xff0c;但是因为一直排队问题不得转战Cursor&#xff0c;等到Trae出付费模式的时候&#xff0c;我已经办了Cursor的会员&#xff0c;本来是想等会员过期了再转战Trae的&#xff0c;但是最近Cursor开始做妖了 网上有一堆怎么…

低代码中的统计模型是什么?有什么作用?

低代码开发平台中的统计模型是指通过可视化配置、拖拽操作或少量代码即可应用的数据分析工具&#xff0c;旨在帮助技术人员及非技术人员快速实现数据描述、趋势预测和业务决策。其核心价值在于降低数据分析门槛&#xff0c;使业务人员无需深入掌握统计原理或编程技能&#xff0…

Linux 下在线安装启动VNC

描述 Linux中的VNC就类似于Windows中的远程桌面系统 本文只记录在Cent OS 7的系统下在线安装VNC。 安装VNC 1、安装VNC yum install tigervnc-server2、配置VNC的密码 为用户设置 VNC 密码&#xff08;首次运行会提示输入&#xff0c;也可以提前输入&#xff09; vncpasswd密码…

支持OCR和AI解释的Web PDF阅读器:解决大文档阅读难题

支持OCR和AI解释的Web PDF阅读器&#xff1a;解决大文档阅读难题一、背景&#xff1a;为什么需要这个工具&#xff1f;问题场景解决方案二、技术原理&#xff1a;如何实现这些功能&#xff1f;1、核心技术组件2、工作流程3、关键点三、操作指南1、环境准备2、生成Html代码3、We…