搞定面试中的HTTP/2.0

302 阅读2分钟

1. HTTP部署指的是什么?

  • Web浏览器(pc & mobile)
  • 非浏览器(HTTP API)
  • Web服务
  • 中间介质(代理、公司防火墙、反向代理、CDN)

2. HTTP/2.0支持哪些新特性?

  • 请求/响应的多路复用
  • 请求优先级
  • 首部压缩
  • 服务器推送
  • 二进制分帧数据层
  • 流量控制

3. 检查是否支持HTTP/2.0?

  • HTTPS 使用ALPN协商
  • HTTP 使用Upgrade机制

4. 多路复用是什么?

  • 通信过程都是在一个TCP连接上完成的
  • 该连接可以承载任意数量的双向数据流
  • 每个数据流有一个唯一的整数标识符
  • 每个数据流以消息的形式发送
  • 消息由一个或多个帧组成
  • 这些帧可以乱序发送
  • 接收方根据帧首部的流标识符重新组装

5. 请求优先级是什么?

  • 浏览器在发现资源时分派请求,指定每个流的优先级
  • 服务器决定最终响应次序
  • HTTP/2.0并没有规定处理优先级的具体算法

6. 首部压缩是什么?

  • 客户端/服务器使用“首部表”来跟踪和存储之前发送的键-值对
  • 通过追加/替换的方式发送差异数据

7. 服务器推送的特点?

  • 推送资源遵守同源策略
  • 客户端可以缓存推送过来的资源
  • 推送资源可以由不同的页面共享
  • 服务器可以按照优先级推送资源

8. 服务器推送的过程?

  • 服务端推送PUSH_PROMISE帧,该帧只包含资源的HTTP首部
  • 客户端接收到后,选择接受/拒绝推送
  • (服务器推送应遵循请求--附加响应模型,且PUSH_PROMISE帧必须在返回响应前发送)

9. 使用二进制分帧数据层通信的过程是什么?

  • 创建新流
  • 发送HTTP首部
  • 发送DATA数据帧

10. 数据帧的组成是怎样的?

  • 数据帧共享一个8字节的首部,该首部包含一个16位的长度、一个8位的类型、一个8位的标志、一个1位的保留位、一个31位的流标识符。

11. 创建新流的方式有哪些?

  • 客户端发送HEADERS帧
  • 服务器端发送PUSH_PROMISE帧
  • (客户端流ID为偶数,服务器端流ID为基数,且各自ID递增)

12. 流量控制的特点是什么?

  • 可以控制连接中每个流占用的资源
  • 接收方可以针对特定的流广播较低的窗口大小,以限制其传输速度
  • 接收方可限定推送数量、限定双向并发流的最大数量
  • 客户端和服务器使用SETTING帧设置