秋招突击——知识复习——HTTP/2、HTTP/3的改良

news2024/9/21 14:49:45

文章目录

    • 引言
    • 正文
      • HTTP/1.1与HTTP/1.0
        • 1、长连接代替短链接
        • 2、管道传输
        • 缺点
      • HTTP2.0和HTTP1.1
        • 1、头部压缩
        • 2、二进制格式
        • 3、并发传输
        • 4、服务器主动推送资源
        • 缺点
      • HTTP/3和HTTP/2
        • 1、无队头阻塞
        • 2、更快的连接建立
        • 3、连接迁移
    • 面试题
      • 1、HTTP是长连接还是短链接?
      • 2、HTTP长连接和短链接有什么区别?
      • 3、HTTP/1.0和HTTP/1.1有什么区别?
      • 4、HTTP/2.0和HTTP/1.1有什么区别?
      • 5、HTTP/2.0和HTTP/3.0有什么区别?
      • 总结

引言

  • 最近面试总是被问到关于HTTP/2、HTTP/3的改进等等,之前学过,但是忘得有点多,这里回顾一下,做一下总结!

正文

HTTP/1.1与HTTP/1.0

1、长连接代替短链接

简介

  • 使用长连接的方式改善了HTTP/1.0短链接造成的性能开销
  • 长连接,只要任意一端没有明确提出断开连接,则保持TCP连接状态

具体使用

  • 通过connection字段,Keep-Alive值实现
Connection:Keep-Alive
  • 开启上述机制之后,就会保持连接
    • 当客户端发送另外一个请求是,会使用同一个链接
2、管道传输

简介

  • 支持管道传输,请求发送不受限制,不用等待第一个请求的响应回复即可发送第二个请求。、
    • 但是服务器必须按照接受请求的顺序发送响应

特点

  • 解决了请求的队头阻塞问题,但是没有解决响应的队头阻塞问题

在这里插入图片描述

缺点

1、首部未压缩

  • 请求和响应的头部含有大量的冗余信息,未经压缩就发送,浪费资源延迟大。
    • HTTP/1.0仅仅压缩了Body

2、队头阻塞

  • 服务器是按照请求的顺序响应的,服务器响应慢,会出现队头阻塞问题

队头阻塞没有搞清楚!

3、被动响应

  • 请求只能从客户端开始,服务器只能被动响应,无法主动推送。
    一个网页的多个构成,可以打包多个消息一块发送吗?
    基于请求,为什么不能多发几个信息?

4、无优先级控制

  • 没有请求优先级控制

HTTP2.0和HTTP1.1

1、头部压缩

简介

  • 如果发送多个请求,头都是一样的或者相似的,协议会帮助消除重复部分,减少冗余部分。

具体实现原理

  • 客户端和服务端共同维护一个静态表和动态表
    • 请求和响应头的信息,使用动态表和静态表中的所以索引号来发送,去除冗余消息

通过索引号代替头部信息,加快发送速度

在这里插入图片描述
静态表如下
在这里插入图片描述

2、二进制格式

简介

  • 对头信息和数据体都采用二进制进行存储,并统称为帧:头信息帧 + 数据帧
    在这里插入图片描述
    作用
  • 计算机收到报文之后,无需再转成二进制,少了两个步骤,加快了数据传输的速率
3、并发传输

简介

  • 实现多个Stream复用一个TCP连接,借此实现并发传输
    • 不用像之前的版本共用一个连接,必须等待前面的响应结束后,才能进行下一次请求响应
    • 这里可以直接使用一个新的stream,相当于增加了stream(类似连接)并行工作
  • 每一个Stream的帧都会带有当前Stream独一无二的编号,并行发送乱序到达也没事,会通过StreamID进行组装。
    在这里插入图片描述

特点

  • 多个Stream运行在一个TCP连接
  • 同一个HTTP请求和响应是在同一个Stream
  • 不同Stream的帧是可以乱序发送的,并行运行,这个具体见下图
    • 同一个Stream中的帧必须要是的严格有序的
      在这里插入图片描述

总结

  • 通过Stream来复用连接,提高数据传输的并发性,省去了反复建立连接的握手以及断开连接的挥手开销

仍旧未解决队头阻塞问题?

  • HTTP/2.0是基于TCP协议来传输数据的,其实面相字节流的协议,必须保证收的字节数据是完整并且连续的才行,内核的数据才会返回给HTTP应用。
    • 只要有一个数据没达到,后面的数据就一直卡在缓冲区,直到这一字节到达才行。

在这里插入图片描述

4、服务器主动推送资源

为什么不一次把所有信息都发送过去?

  • 之前想的是既然请求网页了,为什么不一次把HTML还有对应的CSS文件一次全部发送过去,这样就不需要二次请求了,后来经过了解发现有以下几个问题
    • 减少传输时间和带宽消耗
      • 一个网页是由CSS、HTML还有JS构成,全部打包发送,文件大传输时间增加
      • 一次发只能串行化,一个一个下载,效率太低了,分开发能够并行化下载,效率更高
    • 动态内容
      • HTML、CSS和JS本身就是分离动态的,比如说用户显示的界面不一样,绑定发送复杂低效
    • 报文限制
      • 报文存在限制,Nginx1MB,Tomcat是2MB,一个网页一般是超过这个限制的。

在这里插入图片描述
上图中,推送CSS信息,可以使用不同的Stream,这样就可以并行操作了

缺点
  • 未能彻底解决对头阻塞问题!
  • 还是需要建立链接和释放链接,耗费时间!
  • 更换网络,全部作废,一切重头!

HTTP/3和HTTP/2

HTTP/2.0的原生弊端

  • HTTP/2.0是基于TCP实现的,所以永远解决不了
    • 队头阻塞问题
    • TCP和TCL建立连接的延迟
    • 网络迁移需要重新链接
      • 确定一个TCP连接需要使用四元组确定,一旦任何一个改动了,都需要重新握手

HTTP/3.0为解决这个问题,使用UDP替换TCP,并实现了QUIC协议

QUIC协议特性

  • 应用层实现了类似TCP的连接管理、拥塞窗口、流量控制的特性
  • 无队头阻塞
  • 更快的链接建立
  • 连接迁移

下面将针对上述三个特征逐个图解

1、无队头阻塞

简介

  • 实现类似Stream的多路复用功能,但是Stream没有依赖,相互独立,某个流发生了丢包,不影响其他流
  • 数据可靠性保证
    • 每一个数据包都有一个序号,唯一标识

下述是HTTP/2.0实现的Stream

  • 在应用层面,是已经解决了队头阻塞问题
  • 在传输层,基于TCP的超市重传和按序到达等机制,会停在这里,知道接受完全
    • 本质还是利用TCP连接
      在这里插入图片描述
      下述是基于UDP的连接
  • 利用的是UDP,不需要再受到TCP的影响,超时了,直接重传就行了,Stream是真正并行的,相互独立的

在这里插入图片描述

2、更快的连接建立

传统的方式

  • TCP层和TLC层是分层的,分别属于内核实现的传输层和用户实现的应用层
    • 需要分批次握手,现TCP,然后再是TLS握手

QUIC协议

  • QUIC包含了TLS
    • QUIC只需要两次握手确认双方的链接ID
    • TLS1.3,只需要一个1RTT即可
3、连接迁移

传统方式

  • 基于四元组(源IP、源端口、目标IP、目标端口),一旦一个修改了,就需要重新建立链接

QUIC方式

  • 通过连接ID标记通信的两个端点
    • 客户端和服务端各自选择一个连接ID标记自己,即使IP变了,连接ID不变,就不受影响,直接迁移

暂时还没有推出

面试题

1、HTTP是长连接还是短链接?

  • HTTP 1.0 虽然支持长连接,但是默认的连接行为是短链接,从HTTP1.1版本之后,都是默认长连接了。
  • 通过Connection:keep-Alive字段确认

2、HTTP长连接和短链接有什么区别?

  • 短连接-用完就废:
    • 每次通信请求都需要建立新的连接,请求完成后立即关闭连接
    • 这样每次请求都需要建立连接和释放连接,会增加通信开销和延迟
  • 长连接-用完放着:
    • 在通信过程中保持连接的持续性,多次请求可以共享同一个连接
    • 在长连接中,客户端和服务器建立连接后可以进行多次请求和响应,减少了连接建立和释放的开销,提高了通信效率

3、HTTP/1.0和HTTP/1.1有什么区别?

1、长链接代替短链接

  • HTTP/1.1默认是使用长连接,除非连接的双方其中任何一方主动关闭连接,否则会一直存在,后续请求响应可以继续使用当前存在的连接。
  • 不需要像HTTP/1.0一样,一个请求/响应就建立一个链接,频繁的建立和销毁连接,增加系统的消耗。

2、使用管道传输信息

  • 使用管道传输,解决的请求的对头阻塞问题,不需要像之前传输,只有上一个请求得到响应才能继续发送下一个请求。
  • 提高请求和响应的效率。

3、增加host字段

  • 一个物理服务器可以承载多个域名和站点。

4、HTTP/2.0和HTTP/1.1有什么区别?

通过Stream实现多路复用

  • 引入Stream的概念,不同的HTTP请求和响应用不同的Stream来区分
  • 多个Stream复用同一个连接,
  • 实现了多路复用和并发,在应用层面解决了请求的队头阻塞问题和响应的队头阻塞问题,提高了通信的效率。

请求/响应头采用HPack算法压缩

  • 对Header采用HPack算法进行压缩,客户端和服务端同时维护动态表和静态表,使用索引代替header中重复字段,提高传输的效率。

基于二进制编码传输消息体

  • 使用二进制对消息体进行编码,提高了通信效率,服务端无需在进行二次解码!

实现了主动推动

  • 通过stream实现主动推送资源,不需要客户端再进行二次请求,减少了请求和响应的传递次数。

5、HTTP/2.0和HTTP/3.0有什么区别?

底层基于QUIC,彻底解决了队头阻塞问题

  • HTTP/2.0底层虽然在应用层面解决了对头阻塞问题,但是还是使用TCP,如果某一个Stream因为丢包未收集到完整地数据,后续的Stream就会陷入阻塞!
  • HTTP/3.0底层使用基于UDP协议开发的QUIC协议,彻底解决了对头阻塞问题,某一个Stream因为丢包陷入阻塞,不影响其他的Stream正常运行,真正实现了并发传输!

建立连接花销小

  • HTTP/2.0是基于TCP的,建立连接需要三次握手以及对饮的TLS四次握手
  • HTTP/3.0 是基于QUIC协议,QUIC本质是基于UDP,只需要两次握手确认双方身份就行,然后QUIC中还包含了TLS1.3,只需要两次握手就能实现信息加密,最终总共需要三次握手就能实现的连接建立!

即使网络更换,仍旧能够保持原始数据

  • HTTP/2.0是基于TCP进行连接的,需要四元组信息来确定唯一的连接,一旦其中一个更改,就需要重新建立链接。而QUIC协议是通过彼此的连接号来确定的,即使切换了网络,也不会影响原来的连接,消除重连的成本。

总结

  • 我说之前怎么没怎么了解过HTTP/3.0,原来是我学的时候,还没出来,他是到2022年才被标准化,而且暂时没有很普及!以后有机会回去好好了解的!
  • 继续加油,看看还有哪些知识是忘记了,赶快拾起来!

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

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

相关文章

中年男明星们,正在视频号“收割”50+姐姐

还记得几年前,抖音上许多大妈和“靳东谈恋爱”的事情吗? 尽管那些靳东高仿号,发的是花花绿绿、粗制滥造的视频,明眼人一看就知真假,但仍有众多大妈痴迷。 如今,在视频号上也有一群姐姐们,“迷恋…

模块化沙箱有几种类型?各类模块化沙箱的功能是什么?

模块化沙箱有几种类型?各类模块化沙箱的功能是什么? 模块化沙箱是一种高灵活性和高扩展性的数据安全产品,通过选择不同的沙箱模块,满足不同的安全需求。 模块化沙箱是SDC沙箱的几种表现形式的总称,模块化沙箱总共分为…

Kubemetes高级调度

一组特殊的容器 初始化容器是用来进行初始化操作的,在很多情况下,程序的启动需要依赖各类配置,资源,但是又不能继承在原有的启动命令或者镜像当中,因为程序的镜像可能并没有加载配置命令,此时InitContaine…

Dubbo ZooKeeper Spring Boot整合

依赖配置 1. Dubbo 起步依赖 Dubbo 是一款高性能的 Java RPC 框架&#xff0c;用于快速开发高性能的服务。 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.ver…

Linux中的常见命令——用户管理命令

1、useradd添加新用户 基本语法 语法功能描述useradd 用户名添加新用户useradd -g 组名 用户名添加新用户到某个组 实操案例 1、添加一个新用户【此时的用户是没有密码的】 [rootcentos100 ~]# cd /home [rootcentos100 home]# ls www zss [rootcentos100 home]# useradd…

如果自学通过PMP?

自学&#xff1f;现在没有自学通道啦&#xff0c;要通过有R.E.P授权的机构学习&#xff0c;获得35个PDU才能报考哦~ 所以要报培训班~ 一是&#xff0c;PMP 官方的报考条件需要35个PDU&#xff0c;就是要报机构学习后获得。个人报考渠道去年就关闭了&#xff0c;只能通过机构报…

算法-初阶

文章目录 -1.C 标准0.语法基础 1. C头文件2. C命名空间3. 主函数4. 变量类型5. ASCII码6. 注释1.顺序结构 一、代码示例二、例题1&#xff1a;求圆的面积三、例题2&#xff1a;求解一元二次方程四、总结&#xff1a;2.分支结构 一、代码示例二、例题1&#xff1a;判断一个数是否…

必看 | CDP盘活存量客户的5大步骤和3个应用案例

​“我们有几十家门店&#xff0c;也有APP、小程序和网站&#xff0c;客户信息散落在各系统中&#xff0c;比较杂乱&#xff0c;一直没有统一去维护&#xff0c;现在想把存量客户运营起来&#xff0c;你们CDP能做吗&#xff1f;”类似的咨询&#xff0c;我们几乎每天都会接到。…

工业三防平板全面提升工厂的工作效率

在当今高度自动化和智能化的工业时代&#xff0c;工厂的工作效率成为了企业竞争力的关键因素。而工业三防平板的出现&#xff0c;犹如一颗璀璨的新星&#xff0c;为工厂带来了全新的变革&#xff0c;全面提升了工厂的工作效率。 工业三防平板具备防水、防尘、防摔的特性无论是潮…

基于 Redis 的 HyperLogLog 实现了 UV 的统计

文章目录 前言HyperLogLog 简介HyperLogLog 的工作原理例子总结 前言 在现代网站开发中&#xff0c;用户行为分析是一个非常重要的环节。其中&#xff0c;UV&#xff08;Unique Visitor&#xff0c;独立访客&#xff09;和PV&#xff08;Page View&#xff0c;页面浏览量&…

10 Java数据结构(下):集合进阶之Map(双列集合)系列:

文章目录 前言一、 Map(双列集合)接口1 常用方法2 遍历方式(1)使用map.keySet()方法(2)使用map.entrySet()方法(3)lambda表达式遍历(这个最简单)3 实现类:HashMap、LinkedHashMap、TreeMap(1)HashMap---- HashMap的特点---- HashMap的底层原理---- 特别注意:自定义…

Spring之SpringSecurity

SpringSecurity相关 一、SpringSecurity简介二、SpringSecurity主要功能三、SpringSecurity的Maven依赖四、Security本质&#xff1a;过滤器链五、用户认证1、根据用户实体&#xff0c;封装一个UserDetails实体对象LoginUser类2、自定义UserDetailsService接口的实现 一、Sprin…

[笔记]基于小波分析的基频识别

原文&#xff1a;基于小波分析的油田机械传动装置振动信号识别方法&#xff0c;科技资讯&#xff0c;202305&#xff0c;赵磊 摘要:为提高油田机械设备运行的稳定性与高效性&#xff0c;分析传动装置的运行特性该研究设计了一种基于小波分析的油田传动装置振动信号识别方法。应…

企业选择软件测试外包公司有什么好处软件测评服务公司推荐

软件测试外包公司是专门为企业提供软件测试服务的第三方机构&#xff0c;帮助企业提高软件质量&#xff0c;降低开发和维护成本。以卓码软件测评为例&#xff0c;公司致力于为客户提供全面的软件测试解决方案&#xff0c;包括项目验收测试、软件确认测试、安全测试、性能测试和…

[HZNUCTF 2023 preliminary]ppppop

[HZNUCTF 2023 preliminary]ppppop 点进去之后是一片空白 接着我们打开HackBar 然后我们看到cookie里面有一个base64编码&#xff1a; Tzo0OiJVc2VyIjoxOntzOjc6ImlzQWRtaW4iO2I6MDt9利用在线工具解码得到&#xff1a; O:4:"User":1:{s:7:"isAdmin";b:…

FreeRTOS实战项目CRTP协议移植(实现使用串口传输数据包)

文章目录 一、CRTP 协议①协议层次②端口分配 二、实现串口收发数据包2.1 数据包格式&#xff1a;2.2 如何传递数据包 三、CRTP处理数据过程3.1 CRTP处理数据流程示例&#xff1a;3.2 添加CRPT基本功能①链路初始化函数② CRTP层初始化③创建底层任务代码④ping服务⑤ 上机实验…

宝兰德多款仓颉开源项目获GitCode官方G-Star毕业认证,释放开发效率新动能

近日&#xff0c;由宝兰德基于仓颉编程语言开发的项目「Cangjie-TPC/redis-sdk」「Cangjie-TPC/hyperion」入驻GitCode平台&#xff0c;并获得GitCode官方优秀毕业项目认证&#xff0c;成为G-Star计划的一员&#xff0c;标志着宝兰德与GitCode将携手开启软件研发新纪元&#xf…

变频器会干扰补偿电容器正常工作吗

变频器&#xff08;VFD&#xff0c;Variable Frequency Drive&#xff09;可能会对补偿电容器的正常工作产生干扰。变频器工作时产生的谐波、快速开关操作和高频噪声都可能影响电容器的性能。 一、以下是变频器对补偿电容器可能产生的一些影响&#xff1a; 1、谐波干扰 谐波生…

JS基础之【基本数据类型与类型间的隐式显示转换】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

【Linux】初步识操作系统

linux专栏&#xff1a;《Linux入门系列》 系列文章&#xff1a;gdb-调试器初入门&#xff08;简单版使用&#xff09; 编辑器vim入门&#xff08;概念模式转换技巧&#xff09; 目录 1. 概念 2. 设计操作系统的目的 3. 定位&#xff1a;操作系统负责管理 4. 如何理解管理 …