HTTP 2.0 协议特性详解

news2025/4/19 4:11:13

1. 使用二进制协议,简化传输的复杂性,提高了效率

2. 支持一个 TCP 链接发起多请求,移除 pipeline

HTTP/2 移除了 HTTP/1.1中的管道化(pipeline)机制,转而采用多路复用(Multiplexing)来支持多请求的高效传输。以下是几点关键原因和实现方式:

管道化带来的问题

在HTTP/1.1中,管道化可能导致队头阻塞(Head-of-Line Blocking),即一个请求的延迟会阻碍后续所有请求的处理。例如,如果第一个请求因为网络问题延迟,后续请求必须等待,导致资源利用率低下。

多路复用的好处
  • 独立流(Streams):HTTP/2将每个请求和响应分割为独立的流,每个流都有独特的标识符。这种机制允许在一个TCP连接上同时传输多个流,互不干扰。
  • 二进制分帧(Binary Framing):数据被分割为更小的二进制帧,每帧包含流标识符,确保服务器和客户端能正确处理和组装数据,避免阻塞。

新增优先级机制

HTTP/2允许客户端为每个流设定优先级,服务器据此分配带宽,确保高优先级请求优先处理,优化资源使用和用户体验。

总结而言,HTTP/2通过多路复用替代了管道化,利用独立流、二进制分帧和优先级机制,显著提升了多请求传 输的效率和性能,解决了HTTP/1.1中的队头阻塞问题。

3. 使用HPACK算法来压缩HTTP头部,从而减少数据传输量,提高传输效率。

具体来说,HPACK是HTTP/2协议中使用的一种高效的头部压缩算法,它可以减少重复的头字段传输,降低数据传输的开销。以下是HTTP利用HPACK压缩头部的主要步骤:

静态表和动态表
  • 静态表(Static Table):HPACK算法内置了一个静态表,包含了一些常见的HTTP头字段,如Content-Type、User-Agent等。这些头字段在HTTP通信中经常出现,因此不需要每次都传输它们的全名。
  • 动态表(Dynamic Table):除了静态表,HPACK还会动态维护一个表,记录本次会话中已经传输过的头字段。这样,如果某个头字段在之前的请求或响应中出现过,后续就可以通过索引的方式引用,而不必再次传输完整的头字段。
索引编码
  • 每个头字段都可以通过索引的方式引用静态表或动态表中的条目。例如,如果某个头字段已经在动态表中存在,HTTP/2客户端或服务器可以直接发送该条目的索引,而不是传输整个头字段。
字面量编码
  • 对于未在静态表或动态表中出现过的头字段,HPACK会使用字面量编码进行传输。字面量编码包括头字段的名称和值,但在传输时可以对其进行进一步压缩。
动态表的更新
  • 传输新的头字段后,这些字段会被添加到动态表中,供后续的请求或响应重复使用。动态表的大小是可以调整的,以适应不同的网络环境。
避免压缩膨胀
  • HPACK还通过一些机制避免了压缩膨胀的问题(即压缩后的数据比原始数据更大)。例如,HPACK不会对已经很小的头字段进行压缩,而是直接传输。
与HTTP/2的集成
  • HPACK是HTTP/2协议的一部分,HTTP/2使用二进制分帧机制,进一步优化了头部的传输。通过HPACK压缩后的头部会被分割成更小的块进行传输,从而减少传输延迟。

4. 允许服务端主动推送数据

比如说,建立连接之后,浏览器请求了一个 html,那服务端把这个 html 的 css 和 js 都送过去,减少了请求次数。

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

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

相关文章

微服务链路追踪:SleuthZipkin

文章目录 Sleuth & Zipkin一、Sleuth\&Zipkin介绍二、搭建环境三、Sleuth入门操作四、Zipkin搭建及操作五、RabbitMQ方式发送信息六、Elasticsearch持久化 SpringBootAdmin一、Actuator介绍二、Actuator快速入门三、SpringBootAdmin介绍四、SpringBootAdmin快速入门4.1…

java面试篇 4.9(mybatis+微服务+线程安全+线程池)

目录 mybatis: 1、mybatis的执行流程 2、mybatis是否支持延迟加载? 当我们需要去开启全局的懒加载时: 3、mybatis的一级和二级缓存 微服务 1、springcloud五大组件有哪些 2、服务注册和发现是什么意思?springcloud如何实现…

基于电子等排体的3D分子生成模型 ShEPhERD - 评测

一、背景介绍 ShEPhERD 是一个由 MIT 开发的一个 3D 相互作用感知的 ligand-based的分子生成模型,以 arXiv 预印本的形式发表于 2024 年,被ICLR2025 会议接收。文章链接:https://openreview.net/pdf?idKSLkFYHlYg ShEPhERD 是一种基于去噪扩…

GR00T N1:面向通用类人机器人的开放基础模型

摘要 通用型机器人需要具备多功能的身体和智能的大脑。近年来,类人机器人的发展在构建人类世界中的通用自主性硬件平台方面展现出巨大潜力。一个经过大量多样化数据源训练的机器人基础模型,对于使机器人能够推理新情况、稳健处理现实世界的多变性以及快…

QT简单实例

QT简单实例 QT简单实例一:通过拖动创建1.创建工程2.拖动控件实现响应3.文件目录3.1 TestQDialog.pro3.2 main.cpp3.3 dialog.h3.4 dialog.cpp 二:通过动态创建1.创建工程2.文件目录2.1 TestQDialogSelf.pro2.2 main.cpp2.3 dialog.h2.4 dialog.cpp QT简单…

Linux:初学者的简单指令

文章目录 pwd(Print working directory)whoamilsmkdir ~~cd ~~touch ~~rm ~~ 充当后端服务,我们用xshell工具来进行操作 其中Linux文件是/目录/目录/目录或文件/来表示的(其中目录可以看作是windows操作系统的文件夹,只是Linux中…

端侧大模型综述On-Device Language Models: A Comprehensive Review

此为机器翻译,仅做个人学习使用 设备端语言模型:全面回顾 DOI:10.48550/arXiv.2409.00088 1 摘要 大型语言模型 (LLM) 的出现彻底改变了自然语言处理应用程序,由于减少延迟、数据本地化和个性化用户体验…

python实现音视频下载器

一、环境准备 确保当前系统已安装了wxPython 、 yt-dlp 和FFmpeg。当前主要支持下载youtube音视频 1、安装wxPython pip install wxPython2、安装yt-dp pip install wxPython yt-dlp3、安装FFmpeg 在Windows 10上通过命令行安装FFmpeg,最简便的方式是使用包管理…

三、小白如何用Pygame制作一款跑酷类游戏(按键图片和距离的计算)

三、小白如何用Pygame制作一款跑酷类游戏(实现移动距离的计算,以及按键指引的添加) 文章目录 三、小白如何用Pygame制作一款跑酷类游戏(实现移动距离的计算,以及按键指引的添加)前言一、创建字体文件夹1.可…

H5:实现安卓和苹果点击下载App自动跳转到对应的应用市场

一、需求场景 手机扫描下载App,需要根据不同手机自动跳转到对应的应用市场(商店)里,苹果手机直接打开App Store里指定的app页面,安卓手机如果是海外用户则打开GooglePlay 商店里指定的app页面,国内直接下载…

【Linux】文件传输归档与压缩

目录 配置实验环境 文件传输方法--scp,rsync scp rsync 归档与压缩--tar,gz,bz2,xz,zip 归档---tar 压缩 zip gzip bzip2 xz 归档并压缩 gz bz2 xz 拓展du 配置实验环境 在多个linux系统进行系统传输…

3D人脸扫描技术如何让真人“进入“虚拟,虚拟数字人反向“激活“现实?

随着虚拟人技术的飞速发展,超写实数字人已经成为数字娱乐、广告营销和虚拟互动领域的核心趋势。无论是企业家、知名主持人还是明星,数字分身正在以高度还原的形象替代真人参与各类活动,甚至成为品牌代言、直播互动的新宠。 3D人脸扫描&#…

Git标签的认识

Git标签完全指南:从基础到企业级发布策略 前言 在软件发布领域,Git标签是版本管理的基石。根据2023年GitHub年度报告显示,85%的开源项目使用标签进行版本控制。然而,许多开发者仅停留在git tag的基础使用层面,未能充分…

【Rust基础】使用Rocket构建基于SSE的流式回复

背景 我们正在使用Rust开发基于RAG的知识库系统,其中对于模型的回复使用了常用的SSE,Web框架使用Rocket,Rocket提供了一个简单的方式支持SSE,但没有会话保持、会话恢复等功能,因此我们自己简单实现这两个功能。 使用R…

大前端基础学习

一、cs架构和bs架构 c:客户端, b:浏览器(无需安装,无需更新,可跨平台)√ s:server服务端,帮我们保 存信息,传递信息 二、 altshift向下键向下复制一行 …

Axios 的 POST 请求:QS 处理数据的奥秘与使用场景解析

在现代前端开发中,Axios 已经成为了进行 HTTP 请求的首选库之一,它的简洁易用和强大功能深受开发者喜爱。当使用 Axios 进行 POST 请求时,我们常常会遇到一个问题:是否需要使用 QS 库来处理请求数据?什么时候又可以不用…

Linux 防火墙( iptables )

目录 一、 Linux 防火墙基础 1. 防火墙基础概念 (1)防火墙的概述与作用 (2)防火墙的结构与匹配流程 (3)防火墙的类别与各个防火墙的区别 2. iptables 的表、链结构 (1)规则表 …

【redis进阶三】分布式系统之主从复制结构(1)

目录 一 为什么要有分布式系统? 二 分布式系统涉及到的非常关键的问题:单点问题 三 学习部署主从结构的redis (1)创建一个目录 (2)进入目录拷贝两份原有redis (3)使用vim修改几个选项 (4)启动两个从节点服务器 (5)建立复制,要想配…

EM储能网关ZWS智慧储能云应用(9) — 远程OTA升级

ZWS智慧储能云平台支持远程OTA固件升级,可以针对具体的储能设备进行升级,升级储能网关、EMS主控软件、PCS、BMS等。 简介 储能系统通常高度集成化,一体化设计,将EMS、BMS(电池管理系统)、PCS&#xff08…

ubuntu24.04LTS安装向日葵解决方案

去向日葵官方下载ubuntu使用的deb包 向日葵 输入如下命令安装,将具体版本修改成自己下载的版本 andrew in ~/下载 λ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 290947…