菜单
开源

HTTP/2

概览

HTTP/2.0 是 HTTP 协议的最新版本。它在 HTTP/1 的基础上进行了显著改进。最重要的是,它引入了一个二进制线协议,通过单个 TCP 连接进行多路复用流。这解决了 HTTP/1.1 长期存在的性能问题:队头阻塞

好吧,它至少部分解决了这个问题。TCP 拥塞控制机制在丢包和重传/重组的情况下,可能会干扰多路复用流预期的独立性。完整的解决方案是将 HTTP/2.0 运行在 UDP 之上,就像 Google 使用 QUIC 实现的那样。

HTTP/2.0 的附加特性

  • 内置 HTTP 头部压缩
  • 服务器推送
  • 请求流水线
  • 请求优先级

使用 k6 进行 HTTP/2 负载测试

当您在 k6 中发起 HTTP 请求时,如果服务器支持 HTTP/2.0,k6 会像您的 Web 浏览器一样自动将连接升级到 HTTP/2.0。

要检查特定请求使用了哪种协议,请参阅响应对象的 proto 属性。

JavaScript
import http from 'k6/http';
import { check, sleep } from 'k6';

export default function () {
  const res = http.get('https://quickpizza.grafana.com');
  check(res, {
    'protocol is HTTP/2': (r) => r.proto === 'HTTP/2.0',
  });
  sleep(1);
}

要查看 r.proto 字段可能的值,请参阅 k6 HTTP 文档