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

HTTP/2 由来及特性

HTTP/2 的由来

HTTP/1.x 的局限性
  • 性能瓶颈
    • 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚本等)需要请求时,这些请求只能依次排队发送,即使服务器已经准备好处理后续请求,也必须等待前面的请求完成,这极大地影响了页面的加载速度。
    • 头部冗余:HTTP/1.x的请求和响应头部包含了大量重复的信息,如User - AgentCookie等,每次请求都会携带这些信息,增加了数据传输量,尤其是在多次请求的情况下,会造成不必要的带宽浪费。
    • 传输效率低: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://www.lryc.cn/news/537218.html

相关文章:

  • android 安装第三方apk自动赋予运行时权限
  • PyTorch Lightning LightningDataModule 介绍
  • windows平台上 oracle简单操作手册
  • 【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
  • LabVIEW太阳能制冷监控系统
  • 10.2 Git 内部原理 - Git 对象
  • 作业。。。。。
  • android 的抓包工具
  • 深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化
  • linux中top命令详解
  • 前端包管理器的发展以及Npm、Yarn和Pnpm对比
  • node.js+兰空图床实现随机图
  • 【MySQL】高频 SQL 50 题(基础版)
  • 盛铂科技 SMF106 低相位噪声贴片式频率综合器模块
  • C语言如何实现面向对象?——从结构体到自由函数的思考
  • 深入探索C语言中的字符串处理函数:strstr与strtok
  • 浅聊Docker使用、部署
  • jenkins war Windows安装
  • 学习数据结构(9)栈和队列上
  • 【git-hub项目:YOLOs-CPP】本地实现03:跑自己的实例分割模型
  • MySQL和SQL server的区别
  • C#运动控制——轴IO映射
  • DeepSeek官方发布R1模型推荐设置
  • DeepSeek教unity------MessagePack-03
  • 《安富莱嵌入式周报》第350期:Google开源Pebble智能手表,开源模块化机器人平台,开源万用表,支持10GHz HRTIM的单片机,开源CNC控制器
  • img标签的title和alt
  • MambaMorph brain MR-CT
  • 小米 R3G 路由器(Pandavan)实现网络打印机功能
  • Python PyCharm DeepSeek接入
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第二十节】