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.

posted @   没有烦恼的猫猫  阅读(472)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示