HTTP/2 由来及特性
HTTP/2 的由来
HTTP/1.x 的局限性
- 性能瓶颈
- 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚本等)需要请求时,这些请求只能依次排队发送,即使服务器已经准备好处理后续请求,也必须等待前面的请求完成,这极大地影响了页面的加载速度。
- 头部冗余:HTTP/1.x的请求和响应头部包含了大量重复的信息,如
User - Agent、Cookie等,每次请求都会携带这些信息,增加了数据传输量,尤其是在多次请求的情况下,会造成不必要的带宽浪费。 - 传输效率低:HTTP/1.x采用文本格式传输数据,没有对数据进行有效的压缩和优化,传输效率较低,而且不支持二进制分帧,无法充分利用网络带宽。
需求推动发展
随着互联网的发展,网页内容变得越来越复杂,对数据传输的性能和效率提出了更高的要求。为了满足这些需求,各大浏览器厂商和互联网公司迫切需要一种新的HTTP协议来提高网络传输性能,于是HTTP/2应运而生。
标准化进程
2012年,Google提出了SPDY协议,作为HTTP的实验性替代方案,它引入了二进制分帧、多路复用等重要概念,为HTTP/2的发展奠定了基础。经过多年的研究和改进,2015年5月,HTTP/2被互联网工程任务组(IETF)标准化,成为了HTTP协议的下一代版本。
HTTP/2 的特性
二进制分帧
- 原理:HTTP/2将所有传输的信息分割为更小的帧,并采用二进制格式进行编码。每个帧都有一个唯一的标识符和长度,这样可以更高效地处理和传输数据。
- 优势:二进制分帧使得协议更加紧凑和高效,便于解析和处理,同时也为多路复用提供了基础。例如,浏览器可以将多个请求和响应拆分成不同的帧,在同一个TCP连接上交错发送和接收,提高了传输效率。
多路复用
- 原理:在HTTP/2中,多个请求和响应可以在同一个TCP连接上同时进行,不需要像HTTP/1.x那样为每个请求建立一个新的连接。每个请求和响应都被分配一个唯一的流ID,通过流ID来区分不同的请求和响应。
- 优势:多路复用解决了HTTP/1.x的队头阻塞问题,大大提高了并发性能。例如,一个页面上的多个资源可以同时请求和接收,而不需要等待前面的请求完成,从而加快了页面的加载速度。
头部压缩
- 原理:HTTP/2采用了HPACK算法对请求和响应的头部进行压缩。HPACK算法通过建立一个静态和动态的字典,对重复出现的头部字段进行编码,只传输字段的索引值,从而减少了头部数据的传输量。
- 优势:头部压缩显著减少了冗余数据的传输,节省了带宽,提高了传输效率。尤其是对于多次请求的场景,效果更加明显。
服务器推送
- 原理:服务器可以在客户端请求之前,主动将客户端可能需要的资源推送给客户端。例如,当客户端请求一个HTML页面时,服务器可以同时推送该页面所需的CSS、JavaScript和图片等资源。
- 优势:服务器推送减少了客户端的请求次数,加快了页面的加载速度,提高了用户体验。同时,也减少了网络延迟,因为资源可以在客户端请求之前就已经传输到客户端。
流量控制
- 原理:HTTP/2提供了流量控制机制,允许接收方控制发送方的发送速率。每个流都有一个独立的流量控制窗口,接收方可以根据自己的处理能力动态调整窗口大小,从而避免发送方发送过多数据导致接收方缓冲区溢出。
- 优势:流量控制机制保证了数据传输的稳定性和可靠性,提高了网络资源的利用率。例如,在网络带宽有限的情况下,接收方可以通过调整流量控制窗口来限制发送方的发送速率,避免网络拥塞。
相关文章:
HTTP/2 由来及特性
HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚…...
android 安装第三方apk自动赋予运行时权限
摘要:行业机使用场景点击运行时权限很麻烦,而随着android的演进,对于权限的管控越发严格。故本文通过对系统的修改实现第三方app在运行时直接获取全部权限。 通过属性ro.perms.force_grant控制功能开关。 Index: frameworks/base/services/…...
PyTorch Lightning LightningDataModule 介绍
LightningDataModule 是 PyTorch Lightning 提供的数据模块,用于统一管理数据加载流程(包括数据准备、预处理、拆分、批量加载等)。它的核心作用是将数据处理逻辑与模型解耦,提高代码的可复用性和可读性。 1. LightningDataModule 的作用 ✅ 封装数据预处理:数据下载、清…...
windows平台上 oracle简单操作手册
一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…...
【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
未经许可,不得转载。 文章目录 正文正文 目标URL:REDACTED.google.com。 为了深入了解其功能,我查阅了 developer.google.com 上的相关文档,并开始进行测试。 在测试过程中,我发现了一个 XSS 漏洞,但它触发的域名是经过正确沙盒化的 *.googleusercontent.com,这符合 …...
LabVIEW太阳能制冷监控系统
在全球能源需求日益增长的背景下,太阳能作为一种无限再生能源,被广泛应用于各种能源系统中。本基于LabVIEW软件和STM32F105控制器的太阳能制冷监控系统的设计与实现,提供一个高效、经济的太阳能利用方案,以应对能源消耗的挑战。 项…...
10.2 Git 内部原理 - Git 对象
Git 对象 Git 是一个内容寻址文件系统,听起来很酷。但这是什么意思呢? 这意味着,Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向 Git 仓库中插入任意类型的内容,它会返回一个唯…...
作业。。。。。
顺序表按元素删除 参数:删除元素,顺序表 1.调用元素查找的函数 4.根据下表删除 delete_sub(list,sub); //删除元素 void delete_element(int element, Sqlist *list) …...
android 的抓包工具
charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求: 1.启动代理: 2.设置设备端口 3.手机连接当前代理 …...
深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化
著名 AI 研究者和博主 Sebastian Raschka 又更新博客了。原文地址:https://sebastianraschka.com/blog/2025/understanding-reasoning-llms.html。这一次,他将立足于 DeepSeek 技术报告,介绍用于构建推理模型的四种主要方法,也就是…...
linux中top命令详解
linux中top命令详解 top 是 Linux 中用于实时监控系统资源使用情况的命令,显示包括 CPU、内存、进程等信息的动态视图。以下是 top 命令的详细说明: 命令格式 top [选项] 常用选项 -d:设置刷新间隔时间(秒)。 -n&am…...
前端包管理器的发展以及Npm、Yarn和Pnpm对比
在现代前端开发中,包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展,开发者经历了从 npm 一统天下到 Yarn 挑战格局,再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器(npm/Yarn/pnpm)进行全方位…...
node.js+兰空图床实现随机图
之前博客一直用的公共的随机图API,虽然图片的质量都挺不错的,但是稳定性都比较一般,遂打算使用之前部署的兰空图床,自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作,有兴趣的话可…...
【MySQL】高频 SQL 50 题(基础版)
高频SQL50题(基础版) 1.查询 2.连接 MySQL多表查询(联合查询、连接查询、子查询) left join 左连接 我们首先执行LEFT JOIN操作,将两个表的数据基于 id 列进行组合。同样,我们使用 LEFT JOIN 来确保将所…...
盛铂科技 SMF106 低相位噪声贴片式频率综合器模块
在现代通信和电子设备领域,频率综合器作为关键组件,其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器,以其卓越的性能和独特设计,成为众多高性能系统的选择。 一、频率覆盖范围广,步进…...
C语言如何实现面向对象?——从结构体到自由函数的思考
1. 问题的背景 面向对象编程(OOP)是一种广泛使用的编程范式,其核心思想包括封装、继承和多态。C、Java等语言原生支持OOP,但C语言作为一门面向过程的语言,是否也能实现面向对象?如果可以,如何实…...
深入探索C语言中的字符串处理函数:strstr与strtok
在C语言的字符串处理领域, strstr 和 strtok 是两个非常重要的函数,它们各自承担着独特的功能,为开发者处理字符串提供了强大的支持。 一、strstr函数:字符串查找的利器 strstr 函数用于在一个字符串中查找另一个字符串的首次出现…...
浅聊Docker使用、部署
在Java面试中,当被问到关于Docker中间件的使用、部署及在实际项目中的考虑时,可以按照以下结构和内容来详细回答: 一、Docker中间件的使用 1. Docker是什么? Docker是一个开源平台,允许开发者将应用程序及其依赖项打…...
jenkins war Windows安装
Windows安装Jenkins 需求1.下载jenkins.war2.编写快速运行脚本3.启动Jenkins4.Jenkins使用 需求 1.支持在Windows下便捷运行Jenkins; 2.支持自定义启动参数; 3.有快速运行的脚步样板。 1.下载jenkins.war Jenkins下载地址:https://get.j…...
学习数据结构(9)栈和队列上
1.栈的概念 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作 的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出(先进先出)的原则 栈的插入操作叫做进栈/压栈/入栈ÿ…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
