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)