首页 > 其他分享 >HTTP1和HTTP2的区别

HTTP1和HTTP2的区别

时间:2022-10-29 21:24:44浏览次数:68  
标签:HTTP 请求 区别 TCP 发送 HTTP1 HTTP2 服务器 连接

1. Http1.x
缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞。

2. Http1.0(短连接)
缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(TCP连接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求;
解决方案:添加头信息——非标准的Connection字段Connection: keep-alive

3. Http1.1
改进点:

持久连接(与Http1其它版本的最大区别)
引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接)
管道机制
即在同一个TCP连接里面,客户端可以同时发送多个请求。
分块传输编码
即服务端每产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。
新增请求方式
PUT:请求服务器存储一个资源;
DELETE:请求服务器删除标识的资源;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
CONNECT:保留将来使用
缺点:
虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞”
避免方式:一是减少请求数,二是同时多开持久连接

4. Http/2.0
特点:

采用二进制格式而非文本格式;
完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;(解决了线头阻塞的问题,与Http1最重要的区别)
使用报头压缩,降低开销
服务器推送
4.1 二进制协议
HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。
二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

4.2 完全多路复用
HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。

4.3 报头压缩
HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次;
HTTP/2 对这一点做了优化,引入了头信息压缩机制;
一方面,头信息使用gzip或compress压缩后再发送;
另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。
4.4 服务器推送
HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.
————————————————
版权声明:本文为CSDN博主「每天多学一点点.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JAVA_I_want/article/details/104648129

标签:HTTP,请求,区别,TCP,发送,HTTP1,HTTP2,服务器,连接
From: https://www.cnblogs.com/sexintercourse/p/16839889.html

相关文章

  • document.ready和window.onload的区别
    document.ready和window.onload的区别milletmi关注2018.12.2114:01:18字数207阅读2,717页面加载完成有两种事件一、document.ready,表示文档结构已经加载完成(......
  • JavaScript中window.onload和document.onload有什么区别?
    JavaScript中window.onload和document.onload有什么区别?document.onload在加载图像和其他外部内容之前将其触发。文件。在window.onload之前触发onload事件。window......
  • Koa与Express的区别
    Koa与Express的区别glory苦逼前端​关注他 8人赞同了该文章框架介绍express框架是一个基于Node.js平台的极简、灵活的web应用开发框架,主要......
  • Serialzable和Parcelable的区别?Bunder传递对象为什么需要序列化?
    1Bunder传递对象为什么需要序列化?因为bundle传递数据时只支持基本数据类型,所以在传递对象时需要序列化转换成可存储或可传输的本质状态(字节流)。序列化后的对象可以在网络、......
  • 【PyTorch】 torch.flatten()与nn.Flatten()的区别
    问题torch.flatten()与nn.Flatten()都可以实现展开Tensor,那么二者的区别是什么呢?方法经过查阅相关资料,发现二者主要区别有:(1)默认的dim不同,torch.flatten()默认的dim=0,而n......
  • Mybatis中#{}与${}的区别
    Mybatis中#{}与${}的区别#{}#{}表示一个占位符“?”,采用preparedStatement给占位符设置值,自动进行java类型和jdbc类型转换,进行预编译处理,#{}可以有效防止sql注入(预编译......
  • 【linux】rpm和src.rpm、rpm和noarch.rpm的区别
    目录​​简略​​​​前言​​​​一、rpm和src.rpm文件类型区别及联系​​​​二、rpm文件名称那么长,分别是什么意思?​​​​三、如何本地编译并安装rpm包?​​​​四、如何......
  • src、href区别,link、@import区别
    一、src与href·src(source)和href(超文本引用),都用于引用外部资源,如图片、音频、css文件、js文件等;·src(source),指向外部资源的位置,会将资源下载后嵌入到所处标签位置中。在......
  • 彻底弄懂StringBuffer与StringBuilder的区别
    彻底弄懂StringBuffer与StringBuilder的区别一问道StringBuffer与StringBuilder的区别,张口就来StringBuffer是线程安全的,因为它相关方法都加了synchronized关键字,String......
  • python系列:paramiko中invoke_shell和exec_command的区别
    目录​​exec_command​​​​invoke_shell​​exec_command只能运行一次,命令执行完成后channel将关闭,不能被复用。invoke_shell使用get_pty()获取一个伪终端后,需要使用invo......