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

HTTP1和HTTP2的区别

时间:2022-11-30 15:36:18浏览次数:46  
标签:HTTP 请求 区别 TCP 发送 HTTP1 HTTP2 服务器 连接

HTTP1和HTTP2的区别

一、Http1

Http1.x

缺点:

  1. 线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制的书目录的请求会被阻塞
  2. 短连接:浏览器和服务器他只保持短暂的连接,浏览器的每次请求都需要和服务器建立一个TCP连接(TCP连接的新建成本很高,每次都需要进行三次握手,断开有四次挥手),而且在服务器完成请求后断开TCP连接,服务器都不跟踪每个客户,也不记录过去的请求;(每次请求开销很大
    解决方案:添加头信息——非标准的Connection字段Connection: keep-alive

Http/2.0

特点:

采用二进制格式而非文本格式;
完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;(解决了线头阻塞的问题,与Http1最重要的区别)
使用报头压缩,降低开销
服务器推送

Http1.1

改进点:

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

2.1 二进制协议

HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。
二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

2.2 完全多路复用

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

2.3 报头压缩

HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次;
HTTP/2 对这一点做了优化,引入了头信息压缩机制;
一方面,头信息使用gzip或compress压缩后再发送;
另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

2.4 服务器推送

HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.

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

相关文章

  • EBS描述性弹性域和键弹性域的区别
    Editor.md开源在线Markdown编辑器一.描述性弹性域描述性弹性域的实质就是系统预留自定字段,系统可以使用说明性弹性域来获取业务所特有的重要附加信息。系统可能自......
  • Linux中&&和&,|和||用法及区别详解!
    在使用Linux命令时,我们往往可以一行执行多条命令,或者有条件的执行下一条命令,对于刚接触Linux命令时,特殊符号绝对是最困扰的事情之,本篇文章将为大家详细介绍下&&和&,|和||的......
  • idea创建SpringBoot项目时,Type 选择 maven project 和maven pom 有什么区别?
    https://blog.csdn.net/bin_0203/article/details/121841615 在操作到Type选项时有四种项目类型可供选择:MavenProject(GenerateaMavenbasedprojectarchive)M......
  • v-if和v-show的区别
    v-if 和 v-show的区别v-if 是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建。v-if 也是惰性的:如果在初次渲染时条件值......
  • 1、gradle之assembleDebug与assembleRelease的区别
    官方教程:http://tools.android.com/tech-docs/new-build-system/user-guideassembleDebug会打出debug包assembleRelease会打出release包assemble会同时打出debug包和re......
  • apply/call/bind区别,看看这是不是全网最简单的区分方法
    啥都不说,先上代码,看了秒懂...letarr=[1,2,3,4,5,6,7,8,9]console.log(Math.max.apply(this,arr))//9console.log(Math.max.call(this,...arr))//9......
  • C#中抽象类和接口的区别
    一、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽......
  • C#数据结构--Dictionary、HashTable、List、HashSet区别
    在.Net  模仿java的过程中,抛弃了HashMap,所以我们今天分析下Dictionary、HashTable、HashSet区别。处理碰撞,即碰撞到同一个Bucket槽上:Hashtable和Dictionary从数据结构上......
  • “演员”与“表演艺术家”的区别 —— 个人浅见
    在网上听歌,突然听到了郭兰英的歌曲《我的祖国》,网址:https://music.163.com/#/song?id=236458&market=baiduqk,这是我们非常喜欢的一首歌曲,是自己小时候看电影时就有的歌曲,每......
  • linux和WIN系统区别
    ​​stringtargetUrl=​​​​"https://ip.hahado.cn/ip";​​​​stringproxyIp=​​​​"219.151.125.106";​​​​stringproxyPort=​​​​"31615";​​​​stri......