HTTP2
Chunbin Lv3

http1.1存在的问题

进步

  1. 增加了持久链接
  2. 浏览器为每个域名最多同步维护6个TCP持久链接
  3. 使用CDN实现域名分片机制 // todo: 不知道是什么 需要看看

缺点

  • 对带宽的利用率并不理想
    原因:
  1. TCP慢启动,推迟了宝贵的首次渲染页面的时长。
  • 同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽
  • HTTP/1.1 队头阻塞的问题
    原因:
  1. 在 HTTP/1.1 中使用持久连接时,虽然能公用一个 TCP 管道,但是在一个管道中同一时刻只能处理一个请求,在当前的请求没有结束之前,其他的请求只能处于阻塞状态。这意味着我们不能随意在一个管道中发送请求和接收内容

http2的解决方案

  1. 一个域名使用一个TCP长连接来传输数据,整个页面的资源下载过程只需要一次慢启动,同时避免来多个TCP长连接竞争带宽所带来的问题。
  2. 多路复用,每个请求有一个对应的ID,浏览器接收到之后,会筛选出相同 ID 的内容,将其拼接为完整的 HTTP 响应数据

http2的多路复用

http2添加了一个二进制分帧层

过程

  1. 浏览器准备好请求数据,包括请求行,请求头,POST请求,还有请求体
  2. 经过二进制分帧层,被转换为一个个带有请求ID编号的帧,通过协议栈将其发给服务器
  3. 然后服务器处理该请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层
  4. 二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器
  5. 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求

http2的其他特性

  1. 可以设置请求的优先级,浏览器可以查看Priority优先级
  2. 服务器推送,接收到HTML请求后,附带将要使用的CSS文件和JS文件一并发送给浏览器具体配置实现
  3. 头部压缩,打开network后可以看到很多:authority之类的请求头
由 Hexo 驱动 & 主题 Keep
访客数 访问量