type
status
date
slug
summary
tags
category
icon
password
想试一下 http/1.1 和 http/2.0 有啥区别,正好又想起前段时间了解到的一个压测工具 k6,这不正好,拿 k6 来压一下试试。
安装 k6
官方文档在这里:https://grafana.com/docs/k6/latest/get-started/installation/
使用 go 编写服务端
创建 http 和 https 服务端。在创建 https 服务端时,还需要配置证书,参考 使用golang创建http2和h2c服务端
编写 k6 脚本
k6 可以通过命令行参数来配置参数,也支持使用配置文件。由于 k6 支持使用
k6 new
生成一个默认的模板,所以使用配置文件是很方便的。生成一个配置文件
编辑 script.js
将
http.get('http://test.k6.io');
修改为 http.get("https://localhost:8090");
这里按需填写地址即可。
由于我们服务端设置了证书,而 k6 是没有导入证书的,所以需要设置跳过证书验证。压测
执行命令
k6 run script.js
比较 http/1.1 和 http/2.0
分别访问 8090 端口和 8080 端口。
我应该是用错方式了,测出来使用 http/1.1 和 http/2.0 几乎没有区别。第一次是访问的 8090 端口,服务端打印出来的协议是
HTTP/2.0
,第二次访问的是 8080 端口,服务端打印出来的协议是 HTTP/1.1
,但是可以看到,http 请求的数量都在 3800 左右,几乎没有区别。k6 的不足
k6 目前不支持压测非加密的http2 server(H2C),也就是上面代码中的 9000 端口对应的服务端。如果使用 k6 去测试,那么只能使用
HTTP/1.1
的协议,无法像 curl
那样使用额外的参数 `--http2-prior-knowledge
去指定 HTTP/2.0 协议。相关的讨论可以看这里。https://github.com/grafana/k6/issues/970 ,早在 2019 年就已经在讨论了,不过看起来目前还是没有办法在没有 breaking change 的情况下引入对 H2C 的支持。
- 作者:阿杰鲁
- 链接:http://blog.zaunist.com/article/664d76df-504b-499c-908b-ee706403c0a5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。