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

HTTP/2:让网络飞起来

文章目录

    • 一、HTTP/2 的基本概念和背景
    • 二、HTTP/2 的主要特性和优势
      • 2.1 二进制帧
      • 2.2 多路复用
      • 2.3 头部压缩
      • 2.4 服务器推送
    • 三、HTTP/2 的实现和部署
    • 四、HTTP/2 与现有技术的比较
    • 五、HTTP/2 与 Web 性能优化
    • 六、结束语:让 HTTP/2 助力你的 Web 开发

今天我们来聊聊一个让网络飞起来的技术——HTTP/2。你可能已经听说过 HTTP/2,但是你知道它是什么吗?为什么我们需要它?它和我们正在使用的 HTTP/1.1 有什么区别?别急,接下来我们将一一揭晓。

一、HTTP/2 的基本概念和背景

HTTP/2,全名是 Hypertext Transfer Protocol Version 2,是 HTTP 协议的最新版本。它的起源可以追溯到 Google 的 SPDY 项目,该项目的目的是解决 HTTP/1.1 的一些性能问题。HTTP/2 继承了 SPDY 的许多优点,并在此基础上进行了进一步的改进。

那么,为什么我们需要 HTTP/2 呢?这是因为 HTTP/1.1 虽然经过了多年的使用和改进,但仍然存在一些问题,如头部冗余、无法并行处理请求等。HTTP/2 正是为了解决这些问题,提高网络性能而诞生的。

二、HTTP/2 的主要特性和优势

HTTP/2 引入了许多新的特性,如二进制帧、多路复用、头部压缩、服务器推送等,这些都让 HTTP/2 比 HTTP/1.1 更强大。

2.1 二进制帧

在 HTTP/2 中,所有的通信都是通过二进制帧进行的。每个帧都由一个小的固定大小的头部和一个可选的负载组成。头部包括帧的长度、类型、标志以及帧关联的流的标识符。每个帧的结构如下:

+-----------------+-----------------+-----------------+
| Frame Length    | Frame Type      | Flags           |
+-----------------+-----------------+-----------------+
| Stream Identifier (Associated Stream)              |
+-----------------+-----------------+-----------------+
| Optional Payload                                  
+---------------------------------------------------+
  • Frame Length:帧的长度。
  • Frame Type:帧的类型。
  • Flags:帧的标志。
  • Stream Identifier:帧关联的流的标识符。
  • Optional Payload:可选的负载。

这种二进制帧的结构使得协议的解析、实现和解耦变得更加容易。而且,由于帧的头部固定,可以减少不必要的网络开销。

2.2 多路复用

多路复用是 HTTP/2 中的一种关键特性。在 HTTP/1.1 中,如果要并行发送多个请求,需要创建多个 TCP 连接,这会消耗大量的资源。而在 HTTP/2 中,多个请求和响应可以在同一个连接上并行传输。这是通过将每个请求或响应分割成多个帧,然后在同一个连接上交错发送这些帧来实现的。每个帧都关联一个流,流的标识符用于区分不同的请求或响应。这种机制大大提高了网络的利用率。

以下是一个简单的示意图,描述了HTTP/2 中帧、流、流的标识符、请求或响应的关系:

+-------------------------------------------------+
| TCP Connection                                  |
|                                                 |
| +------------------+ +------------------+       |
| | Stream 1        | | Stream 2        |  ...  |
| | (Request/Response A) | (Request/Response B) |       |
| | +------+ +------+ | +------+ +------+ |       |
| | |Frame1| |Frame2| | |Frame1| |Frame2| |       |
| | +------+ +------+ | +------+ +------+ |       |
| +------------------+ +------------------+       |
+-------------------------------------------------+

在这个图中,每个 TCP 连接上可以有多个流(Stream 1,Stream 2,…),每个流对应一个请求或响应(Request/Response A,Request/Response B)。每个请求或响应又被分割成多个帧(Frame 1,Frame 2),这些帧交错在同一个连接上发送。

2.3 头部压缩

在 HTTP/1.1 中,每个请求和响应都会发送大量的头部信息,这会占用大量的带宽。HTTP/2 通过引入 HPACK 压缩格式,有效地解决了这个问题。HPACK 使用两个主要的技术来压缩头部:一是静态哈夫曼编码,用于压缩单个头部字段;二是动态表,用于在整个连接过程中缓存和复用之前发送的头部字段。这种机制大大减少了头部的大小,从而节省了带宽。

2.4 服务器推送

服务器推送允许服务器未经客户端请求就发送资源。这是通过服务器发送一个 PUSH_PROMISE 帧来实现的,该帧包含了服务器将要发送的资源的头部字段。然后,服务器可以开始发送这个资源的数据帧,就好像这个资源是由客户端请求的一样。这种机制可以使得客户端更早地获取到资源,从而提高页面的加载速度。

三、HTTP/2 的实现和部署

那么,如何在服务器和客户端实现 HTTP/2 呢?其实大多数现代的 web 服务器和浏览器都已经支持 HTTP/2。你只需要更新你的 web 服务器和浏览器到最新版本,就可以使用 HTTP/2 了。

部署 HTTP/2 也很简单。由于 HTTP/2 完全兼容 HTTP/1.1,你不需要修改任何应用代码,只需要在你的 web 服务器上启用 HTTP/2 即可。

四、HTTP/2 与现有技术的比较

当我们谈论 HTTP/2 时,我们经常会把它和 HTTP/1.1、SPDY、QUIC 等其他网络传输协议进行比较。

相比 HTTP/1.1,HTTP/2 的性能有了显著的提升,如我们前面所说的二进制帧、多路复用、头部压缩、服务器推送等。

相比 SPDY,HTTP/2 在其基础上进行了进一步的改进,如引入了二进制帧,改进了头部压缩算法等。

相比 QUIC,HTTP/2 更加稳定和成熟,而 QUIC 还在实验阶段,但 QUIC 有一些更先进的特性,如基于 UDP 的传输,我们可以期待其未来的发展。

五、HTTP/2 与 Web 性能优化

最后,我们来谈谈 HTTP/2 如何影响现有的 Web 性能优化策略。

在 HTTP/1.1 的时代,我们有很多优化策略,如文件合并、图片雪碧图、域名分片等,这些都是为了解决 HTTP/1.1 的限制。但在 HTTP/2 中,这些优化策略可能就不再需要了,甚至可能会适得其反。

  • 文件合并:在 HTTP/2 中,由于支持多路复用,我们不再需要将多个文件合并为一个文件,以减少请求次数。反而,保持文件的独立,可以让浏览器更好地进行缓存和并行处理。

  • 图片雪碧图:在 HTTP/2 中,由于支持多路复用,我们不再需要将多个图片合并为一个雪碧图,以减少请求次数。反而,保持图片的独立,可以让浏览器更好地进行缓存和并行处理。

  • 域名分片:在 HTTP/2 中,由于支持多路复用,我们不再需要将资源分散到多个域名,以增加并行连接数。反而,使用一个域名,可以让浏览器更好地进行连接复用。

因此,我们在 HTTP/2 下,需要重新思考我们的 Web 性能优化策略,以充分利用 HTTP/2 的特性。

六、结束语:让 HTTP/2 助力你的 Web 开发

好了,通过上面的介绍,相信你对 HTTP/2 有了更深的理解。HTTP/2 是一个强大的网络传输协议,它为我们的 Web 开发带来了许多优势。希望你能在你的项目中尝试使用 HTTP/2,让你的网站飞起来!

相关文章:

HTTP/2:让网络飞起来

文章目录 一、HTTP/2 的基本概念和背景二、HTTP/2 的主要特性和优势2.1 二进制帧2.2 多路复用2.3 头部压缩2.4 服务器推送 三、HTTP/2 的实现和部署四、HTTP/2 与现有技术的比较五、HTTP/2 与 Web 性能优化六、结束语:让 HTTP/2 助力你的 Web 开发 今天我们来聊聊一…...

C++ primer plus 第17 章 输入、输出和文件:刷新输出缓冲区

C primer plus 第17 章 输入、输出和文件:刷新输出缓冲区 C primer plus 第17 章 输入、输出和文件:刷新输出缓冲区 文章目录 C primer plus 第17 章 输入、输出和文件:刷新输出缓冲区17.2.3刷新输出缓冲区 17.2.3刷新输出缓冲区 如果程序使…...

项目总结2

文件的分片上传 格外功能是:秒传,断点续传。 今天最惨,上午找bug,下午一直在修改,晚上脑子what了,混乱的很,数据表之间的逻辑不清晰,导致我传值,还有操作数据库一直有问…...

PXE实现自动批量安装部署操作系统

PXE简介 PXE(Preboot eXecution Environment)是一种在计算机启动时使用网络接口从远程服务器获取操作系统安装和启动信息的技术。通过PXE,计算机可以从局域网中的PXE服务器上下载操作系统安装文件,并进行自动化的操作系统部署或故…...

Cyber Weekly #18

赛博新闻 1、Google 狂卷小模型,2B 参数 Gemma 2 赶超 GPT-3.5 Google本周发布了开源的轻量级、高性能模型 Gemma 2 2B。它拥有 20 亿参数,是从更大规模的模型中提炼而来的,在 LMSYS 大模型竞技场的得分超越了 GPT-3.5 和 Mixtral 8x7B。该…...

Open Interpreter - 开放解释器

文章目录 一、关于演示它是如何工作的?与 ChatGPT 的代码解释器比较 二、快速开始三、更多操作1、互动聊天2、程序化聊天3、开始新的聊天4、保存和恢复聊天5、自定义系统消息6、更改模型7、在本地运行 Open Interpreter终端Python上下文窗口,最大令牌 8、…...

“八股文”:程序员的福音还是梦魇?

——一场关于面试题的“代码战争” 在程序员的世界里,“八股文”这个词儿可谓是“如雷贯耳”。不,咱们可不是说古代科举考试中的那种八股文,而是指程序员面试中的那些固定套路的题目。如今,各大中小企业在招聘程序员时&#xff0…...

数据结构第2天作业 8月3日

单向链表 typedef int datatype; //由于有效数据不一定是正数,所以将数据重命名。typedef struct lklst{ //不能是无名结构体了,因为定义指针域的时候需要使用union{int len; //头结点时候使用;datatype data; …...

设计界的新宠:5款热门UI在线设计软件评测

随着用户界面设计行业的蓬勃发展,越来越多的设计师进入用户界面设计。选择一个方便的用户界面设计工具尤为重要!除了传统的用户界面设计工具,在线用户界面设计工具也受到越来越多设计师的青睐。这种不受时间、地点、计算机配置限制的工作方法…...

github添加ssh密钥,通过ssh方式推送代码

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 很多人在使用github的时候,如果还是使用https的方式推送代码的话,可能会…...

Python设计模式 - 抽象工厂模式

定义 抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 产品等级结构与产品族 为了更好地理解抽象工厂模式,先引入两个概念: 产品等级结构:就是产品的…...

【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题

目录 📕 单例模式 🌳 饿汉模式 🚩 线程安全 🎍 懒汉模式 🚩 懒汉模式-单线程版 🚩 懒汉模式-多线程版 🎄 指令重排序 📕 单例模式 单例模式是一种经典的设计模式,…...

Vue3使用Cascader 级联选择器如何获取值并提交信息

我写了一个用户对象&#xff0c;有address地址字段&#xff0c;我怎么将用户选择的级联数据selectedValue值传给address&#xff0c;并将对象返回给后端&#xff0c;核心代码实现了该问题。 <script> 核心代码&#xff1a; //获取住址并更新给addresslet selectedValue…...

Python面试整理-第三方库

Python社区提供了大量的第三方库,这些库扩展了Python的功能,覆盖了从数据科学到网络应用开发等多个领域。以下是一些非常流行和广泛使用的第三方库: 1. NumPy ● 用途:数值计算。 ● 特点:提供了一个强大的N维数组对象和大量用于数学运算的函数。 ● 应用场景:科学计算、…...

电脑添加虚拟网卡与ensp互联,互访

一、按照过程 1、打开设备管理器 2、点击网络适配器&#xff0c;点击左上角操作&#xff0c;点击“添加过时硬件” 3、下一页 4、选择“安装我手动从列表选择的硬件”&#xff0c;下一页 5、下拉&#xff0c;选择“网络适配器”&#xff0c;下一页 6、厂商选择“Microsoft”&…...

悬而未决:奇怪的不允许跨域CORS policy的问题

我在本地HBuilderX中进行预览写好的前端网页&#xff0c;它里面用了ajax访问了远程服务器的后端API网址&#xff0c;不出意外地报不允许跨域访问的错了&#xff1a;Access to XMLHttpRequest at ‘http://xxx.com/MemberUser/login’ from origin ‘http://mh.com’ has been b…...

索引优化秘籍:SQL Server数据库填充因子的调优艺术

索引优化秘籍&#xff1a;SQL Server数据库填充因子的调优艺术 在SQL Server的性能优化中&#xff0c;索引起着至关重要的作用。而索引填充因子&#xff08;Fill Factor&#xff09;则是控制索引页填充程度的重要参数&#xff0c;它直接影响索引的存储效率和查询性能。本文将深…...

ffmpeg 的内存分配架构

------------------------------------------------------------ author: hjjdebug date: 2024年 08月 01日 星期四 18:00:47 CST descripton: ffmpeg 的内存分配架构1 ------------------------------------------------------------ ffmpeg 的内配分配搞的人晕菜&#…...

Vue+live2d实现虚拟人物互动(一次体验叙述)

目录 故事的开头&#xff1a; 最终的实现效果&#xff1a; 实现步骤&#xff1a; 第一步&#xff1a;下载重要文件 第二步&#xff1a;创建vue项目文件&#xff0c;将刚下载文件拷贝到public目录下 第三步&#xff1a;在index.html文件中引入js 第四步&#xff1a;使用&…...

内联函数的概念和用途以及区别

内联函数&#xff08;Inline Function&#xff09;是C&#xff08;以及C99之后的C语言&#xff09;中的一个特性&#xff0c;旨在通过减少函数调用的开销来提高程序的执行效率。在正常情况下&#xff0c;当程序调用一个函数时&#xff0c;会发生一系列的操作&#xff0c;包括保…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...