HTTP/2.0


HTTP/1.1的不足

  • 在传输中会出现队首阻塞问题
  • 响应不分轻重缓急,只会按照先来后到的顺序执行
  • 并行通信需要建立多个TCP连接
  • 服务器不能主动推送客户端想要的资源,只能被动的等待客户端发起请求
  • 由于HTTP是无状态的,所以每次请求和响应都会携带大量冗余信息

二进制分帧层

  • 在HTTP/2.0中,要先对数据进行二进制编码,再把数据分成一个一个的帧,接着把帧送到数据流中,最后对方接接收帧并拼成一条消息,再处理请求
  • 在2.0版本中,通信的最小单位是帧,若干个帧组成一条消息,若干条消息再数据流中传输,一个TCP连接可以分出若干条数据流

多路通信

  • 在HTTP/1.1中加入了管道化的技术,但是服务器必须一条一条按顺序进行处理,本质上还是串行通信
  • 队首阻塞:发送方向接收方发送包的过程中,如果出现丢包,发送方会再发一次丢失的包,由于通信两端都是串行处理请求的,所以接收端在等待这个包到达之前,不会再处理后面的请求,所以接收端在等待这个包到达之前,不会再处理后面的请求,这种现象称为队首阻塞
  • HTTP/2.0不但解决了队首阻塞问题,还将TCP建立次数降低到1次。通信两端秩序将消息分解为独立的帧,然后在多条数据流中乱序发送,最后在接受端把帧重新组合成消息,并且各条消息的组合互不干扰,实现真正意义上的并行通信

请求优先级

  • 客户端对请求资源的迫切都是不同的,在HTTP/1.1中,只能是谁先请求,谁就先处理,不能显式标记请求优先级
  • 在HTTP/2.0中,每条数据流都有一个31位的优先级,值越小优先级越大

服务器推送

  • HTML文档中的资源可以从服务器中拉取,也可以进过编码后直接嵌入。嵌入虽然可以减少一次请求,但同时会让HTML文档体积膨胀,降低压缩效率,破坏资源缓存
  • HTTP/2.0支持服务器主动推送,简单说就是服务器一次请求返回多个响应。服务器除了处理最初的请求外,还会额外推送客户端想要的资源,无需客户端发出明确的请求

首部压缩

  • HTTP是无状态的,为了准确的描述每次通信,通常都会携带大量的首部,这些首部每次会消耗上百甚至上千字节的带宽,为了降低这些开销,HTTP/2.0会先用HPACK算法压缩首部,再进行传输
  • HPACK算法会让通信两端各自维护一张首部字典表,表中包含了首部名和首部值,每次请求记住已发哪些首部,下一次只需传输不同的数据,相同的数据传索引就行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值