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
属性。
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 文档。