计网—HTTP1.0、HTTP2.0、HTTP3.0优缺点、区别及联系

news/2024/5/18 15:14:03 标签: 网络, http, udp, https

一、HTTP1.0问题?

▪ 短连接⽆状态,每次三次握手四次挥⼿

▪ 第⼀个请求发出去必须等确认回来,才能发第⼆个请求

二、HTTP1.1优缺点?

优点:简单、灵活易扩展、应用⼴泛、长连接

缺点:明⽂传输、头部巨大、队头阻塞(管道中⼀个请求阻塞,后⾯的请求也被阻塞)、 不⽀持服务器推送、并发连接有限、 

三、HTTP2.0优缺点?

优点:头部压缩、⼆进制格式、数据流、多路复⽤、服务器推送

缺点:队头阻塞(用的是TCP,stream数据流后续内容需要等待)、握手次数多、连接迁移(4G换WIFI,四元组变化,需要再次三次握手)

四、HTTP3.0优点?

▪ UDP+QUIC(HTTP2 + TLS + TCP)解决队头阻塞、握⼿次数减少,解决连接迁移 

五、HTTP1.0和HTTP1.1的区别?

长连接

        1.0每⼀次请求都需要三次握⼿,并且是串行的请求;

        1.1新增了长连接(connection:keep-alive),默认长连接

管道

        1.0发送⼀个请求必须等待响应才能发送第⼆个,

        1.1新增了管道(pipeline),同⼀个TCP链接中 可以发出多个请求

断点续传

        HTTP1.0不支持,1.1新增了range字段,指定数据字节位置,开始可以断点续传

新增HOST请求头

缓存处理不同

错误状态码,新增了错误状态码,比如410表示服务器的资源被永久删除

六、HTTP1.1和HTTP2.0的区别?

头部压缩:如果发出多个请求,头部相同,2.0会消除重复的部分

        主要通过Huffman 编码、动态字典、静态字典来达到头部压缩的目的

二进制格式:1.1用纯⽂本,2.0中用二进制格式

        比如状态码 200 ,在 HTTP/1.1 是用 '2''0''0' 三个字符来表示(二进制:00110010 00110000 00110000),共用了 3 个字节;在 HTTP/2 对于状态码 200 的二进制编码是 10001000,只用了 1 字节就能表示,相比于 HTTP/1.1 节省了 2 个字节

数据流:2.0数据包不按顺序发送;因此需要数据包标记,指出属于哪个回应,请求回应的数据包称为数据流,每个数据流都做了标记有编号;客户端还可以指定数据流优先级,可以先响应优先级高的

        在 HTTP/2 连接上,不同 Stream 的帧是可以乱序发送的因此可以并发不同的 Stream ,因为每个帧的头部会携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息,而同一 Stream 内部的帧必须是严格有序的。 

多路复用:2.0可以在⼀个连接中并发多个请求或响应,解决了队头阻塞问题

服务器推送:1.1服务器只能被动的响应,2.0可以主动向客户端发送消息 

七、HTTP2.0和HTTP3.0的区别?

传输层协议不同:2.0⽤TCP(有队头阻塞),3.0⽤UDP(⽆队头阻塞)

改为QUIC协议:3.0新增了QUIC(在UDP之上伪TCP+TLS+HTTP2.0的多路复用协议),基于UDP的QUIC可以实现类似TCP的可靠传输

握手次数:2.0基于HTTPS实现,三次握手+三次握手,总共6次;3.0⽤QUIC只需要3次

连接迁移:4G换WIFI后IP地址变,QUIC不用四元组,⽤两个ID标记自己

 

https://img-blog.csdnimg.cn/img_convert/898071b24246486d4f031350c49ff35a.gif" />

 


http://www.niftyadmin.cn/n/1413754.html

相关文章

JDK8中JVM堆内存划分

一:JVM中内存 JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用执行线程方法 存放本地临时变量与线程中方法执行时候需要的引用对象地址。JVM所有的对象信息都 存放在堆内存中,相比栈内存,堆内存可以所…

Nhibernate学习起步之many-to-one篇

1. 学习目的: 通过进一步学习nhibernate基础知识,在实现单表CRUD的基础上,实现两表之间one-to-many的关系. 2. 开发环境必要准备 开发环境: windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition 必要准备: 学习上篇文…

linux下解决pip [Read timed out] 的方法

修改 ~/.pip/pip.conf (如果没有该目录、文件,则新建一个) 增加内容如下 [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host https://pypi.tuna.tsinghua.edu.cn 另外还有一些其他的源 阿里云 h…

Linux下使用nexus搭建maven仓库私服

2019独角兽企业重金招聘Python工程师标准>>> 下载安装 下载地址:http://www.sonatype.org/nexus/archived (目前最新版本是2.12.0-01) 解压后会在同级目录中,出现两个文件夹: nexus-2.12.0-01 和sonatype-work ,前者包…

项目选题报告(待就业六人组)

作业描述 所属课程软件工程1916|W(福州大学)作业要求团队作业第二次—项目选题报告团队名称待就业六人组作业目标明确选题的需求、价值与可行性,供用户确认项目,和用户形成一致的理解,为下一步详细设计软件奠定基础项目…

Nhibernate学习之many-to-many篇

学习目的: 通过进一步学习Nhibernate基础知识,掌握用Nhiberate实现多对多的业务逻辑 开发环境必要准备 开发环境: windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition 前期准备: 学习上两篇单表操作和many-to-one篇 3.对上…

名字太长辣眼睛,ubuntu如何设置不显示用户和本机名?

有时候在linux下进入到某个很深的目录中,光路径都能占一行,看起来及其尴尬,又或者需要截图出去,但是又不想暴露过多信息,一般操作就是截图后再马赛克掉,类似下面这样 现在有一种十分简单的方法 # sudo vi …

2018-2019-2 网络对抗技术 20165220 Exp2 后门原理与实践

实验内容 1.使用netcat获取主机操作Shell,cron启动2.使用socat获取主机操作Shell, 任务计划启动3.使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell4.使用MSF meterpreter&#xff0…