Curl:单行测试 http/2 支持

Posted

技术标签:

【中文标题】Curl:单行测试 http/2 支持【英文标题】:Curl: one-liner to test http/2 support 【发布时间】:2018-12-19 01:23:15 【问题描述】:

我目前正在编写一个单元测试来检查是否支持 http/2

是否有一个 curl 单行程序检查是否支持 http/2 并输出易于解析的响应?

【问题讨论】:

【参考方案1】:

支持 HTTP/2:

$ curl -sI https://curl.se -o/dev/null -w '%http_version\n'
2

不支持 HTTP/2(在这种情况下提供 1.1):

$ curl -sI http://curl.se -o/dev/null -w '%http_version\n'
1.1

(此命令行需要 curl 7.50.0 或更高版本才能工作)

【讨论】:

它给了我以下错误: curl: unknown --write-out variable: 'http_version' 如果您正在使用自签名证书测试服务器,请使用 -k (curl -ksI ...) 运行。【参考方案2】:

运行

curl --version

并在功能列表中查找 HTTP2

【讨论】:

单线:curl --version | grep -i http2 问题是关于 http2 对特定网站的支持,而不是 curl 本身!【参考方案3】:

您可以在这里找到list of Tools for debugging, testing and using HTTP/2。

可能最简单的命令行是:

$ is-http2 www.cloudflare.com

但这需要npm install -g is-http2-cli

要使用curl 进行测试,您可能需要使用nghttp 库对其进行编译,在macOS 中,这可以通过使用brew 来完成,您可以使用:

$ brew install curl --with-nghttp2

然后你可以使用@daniel-stenberg 在他的回答中建议的内容

$ curl -sI https://curl.haxx.se -o/dev/null -w '%http_version\n'

如果支持 http2,您将在哪里获得 2。

【讨论】:

感谢您的回答。您的答案还包含使用其他工具的选项,这非常有用。但是,由于 Daniel Stenberg 的回答更适合原始问题,因此我将接受他的回答。 你知道,@nbari is-http2 和 curl 输出不同: curl -sI curl.haxx.se HTTP/2 200 server: Apache ... is-http2 curl.haxx.se:443 × HTTP/2 not supported curl.haxx.se:443【参考方案4】:

我用过

curl -kvso /dev/null --http2 https://app.domain.com:443

返回的

...
> GET / HTTP/2
...
< HTTP/2 302
...

这不是检查是否支持 HTTP2,而是检查 HTTP2 是否真的有效。

【讨论】:

-kvso /dev/null 是更详细选项列表的缩写形式:--insecure --verbose --silent --output /dev/null - 我建议咨询curl.haxx.se/docs/manpage.html 和 Ctrl+F 那里的选项以查看详细信息。

以上是关于Curl:单行测试 http/2 支持的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 是不是支持以明文形式从 http/1.1 升级 http/2 (h2c)

前端测试集

前端测试集

前端测试集

如何利用cURL和python对服务端和web端进行接口测试

Linux curl 命令模拟 POST/GET 请求