Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

HTTP2-特性

  • 前置知识
    • HTTP协议基于TCP协议,需要先建立TCP连接,进行三次握手后,才能进行HTTP的传输

允许TCP连接复用

  1. 对于HTTP1.1

    • 每个请求都需要建立一个TCP连接,消耗时间和资源,浏览器为控制资源,单一域名下的连接并发数在6-8个
    • 所以在1.1中,默认开启 Keep-Alive 参数,让服务端在响应后仍保持连接,让多个请求排队使用同一个TCP连接,一般保持15秒
  2. 对于HTTP2

    • 对同一 Host IP的请求都复用一个TCP连接

解决队头堵塞

  1. 对于HTTP1.1

    • 虽然Keep-Alive可以多个请求使用同一个TCP连接,但只能串行排队进行,第二个必须等第一个的响应返回,会造成阻塞
  2. 对于HTTP2

    • 引入二进制帧,使得复用的一个TPC连接内可以并行发送多个请求,也就是说可以存在多条虚拟的通道,称为流,每条流都有唯一的标识和优先级
      • 多个帧可以交错传输,然后根据帧首部的标识判断属于哪条流,重新组装
      • 但如果传输过程出现丢包,还是会阻塞

头部压缩

  1. 对于HTTP1.1

    • Header本身没有经过任何压缩,完全是纯文本传输
    • 最占用体积的就是Cookie,尽管限制在4KB以内,但复杂页面上百个请求,这个传输累计量就很大
  2. 对于HTTP2

    • 引入了HPACK头部压缩算法,包括
      • 一套静态字典,存储常用的头部名和键值对
      • 一套动态字典,动态增加内容
    • 实际效果,能压缩76%