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

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

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

【问题讨论】:

    标签: unit-testing curl http2


    【解决方案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 那里的选项以查看详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2016-10-28
    • 2017-09-26
    • 2017-08-11
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多