HTTP2新特性

HTTP1.1中存在问题

  • 队头阻塞:TCP连接只能发送一个请求,该请求未完成时,后续请求将会被阻塞
  • 头部冗余:headers采用文本格式,每次请求会带上cookie、user-agent这些和之前请求完全相同的头部
  • TCP连接数限制:对于同一个域名 ,浏览器最多能建立6~8个,但每个TCP只能请求一次,受限较大
    • HTTP1.1 中解决连接数受限导致的队头阻塞:
      • 域名切片 ,将资源放到细分的域名下,但TCP连接本身会有DNS查询 三次握手 慢启动等,会占用额外内存和CPU;同时对于服务器来说过多的连接也会造成网络拥挤与阻塞
      • webpack,将零碎小的JS文件合成大的JS文件,减少请求次数 ,但会因为客户端需要加载更大的JS文件,打破原有缓存小文件的优势
      • 雪碧图方案
  • 明文传输不安

HTTP2新特性与优势

1 二进制分帧层

是HTTP2性能的核心所在,HTTP2是二进制协议,采用二进制格式传输数据,基于TLS实现HTTP2

  • 新增二进制分帧层,headers和data都是二进制,统称为帧:HEADER Frame 和 DATA Frame

img

2 多路复用

解决HTTP/1.1的线头阻塞和多个TCP连接的问题,HTTP将会让所有的通信再一个TCP连接上完成,不用频繁建立多个TCP请求,真正实现了请求的并发;

首先会建立一个TCP连接,连接上面可以有任意多个流(stream),头部和数据消息分割成了一个或多个帧在流里面传输(依靠二进制分帧层),帧传输过去后,再对帧进行重组,重新形成一个完整的请求或响应

3 头部压缩

HTTP1.X中,首部用文本格式传输,通常每个传输都会增加500-800字节的开销;而网页中有着大量HEADERS字段重复的请求,如cookie、user-agent等;HTTP2采用HPACK压缩格式来压缩头部;

头部压缩需要再浏览器和服务器之间:

  • 维护一份相同的静态字典,包含常见的头部名称,以及常见头部名称和值的组合
  • 维护一份相同的动态字典,支持动态的添加内容
  • 通过静态赫夫曼(Huffman)编码对传输的首部字段进行编码

HTTP2静态字典

在这里插入图片描述

如果需要传输的字段在字典树中有字段和其内容,则只需传输其索引值就ok了

如果字典树没有的话,第一次传输需要其对应的索引和其值,之后浏览器和服务器会通过Huffman编码后存入动态的字典树

4 服务端推送

服务端可以主动向客户端推送资源

如客户端请求的.html页面中,含有后续仍需请求的.css .png之类的文件,服务器配置好服务器推送后,会在客户端请求.html资源时,将.css .png此类关联的资源主动推送到客户端缓存中

即服务端和浏览器进行一次通信即可得到所有资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值