cURL 不适用于 nghttp2

Posted

技术标签:

【中文标题】cURL 不适用于 nghttp2【英文标题】:cURL is not working with nghttp2 【发布时间】:2015-06-27 20:34:06 【问题描述】:

我想将 http/2 与 cURL 一起使用。首先,当我尝试 curl --http2 https://http2.akamai.com/ - “不支持协议”时遇到错误。我安装了 nghttp2 并重新安装了 cURL,就像它所描述的 here 一样。错误消失了,我现在可以使用curl --http2 获取数据。但是页面https://http2.akamai.com/ 告诉我“此浏览器未启用 HTTP/2”,而在 chrome 中或直接通过 nghttp2 显示“您现在正在使用 HTTP/2!”。

我正在使用 mac os x 并通过自制软件将所有依赖项安装在最新版本中。我下载的 curl 源码 (7.41) here.

【问题讨论】:

【参考方案1】:

您可能没有运行新构建的 curl,或者您的新 curl 构建正在使用以前的 libcurl 安装。调用“curl --version”并确保将“HTTP2”列为受支持(包含在功能中)。

您还需要确保使用支持 ALPN(基于 TLS 的 HTTP/2)的 TLS 库版本构建 curl。如果使用 openssl 构建,则需要 1.0.2 版(或更高版本)。

我刚刚在https://http2.akamai.com/ 上尝试过,它显示“您现在正在使用 HTTP/2!”当我像这样尝试我的 curl 构建时就好了:

$ curl --http2 -kv https://http2.akamai.com/ 

您可以查看详细输出,您应该会看到 ALPN 报价以及 curl 和服务器同意使用的协议。

【讨论】:

是的,HTTP2 被列为一项功能。这是完整的输出:localhost:~ svenkeinath$ curl --version curl 7.41.0 (x86_64-apple-darwin14.3.0) libcurl/7.41.0 OpenSSL/0.9.8zd zlib/1.2.5 nghttp2/0.7.7 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL libz HTTP2 UnixSockets 是的 :) 谢谢!使用 ./configure --with-ssl=/usr/local/Cellar/openssl/1.0.2a-1/ 重建 cURL 就成功了。 所以....如果您安装了 http2 c 库并且 curl 没有显示 http2 协议可用怎么办? 我需要更多详细信息。我建议将您的问题放到 curl-library 列表中,我们可以在那里解决。【参考方案2】:

对于启用 HTTP/2 的特定浏览器,该页面可能已列入白名单,因此它会返回静态内容,因为它无法识别 cURL。你可以set your user agent 假装你是Chrome,例如

curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (Khtml, like Gecko) Chrome/41.0.742.112 Safari/534.30" --http2 https://http2.akamai.com/

【讨论】:

我使用旧摩托罗拉剃须刀上的 UA 访问,它运行良好:MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0 不,它们都不起作用。这不仅是这个特定页面的问题 - 我还在 twitter 和其他一些页面上尝试过。 我的意思是它与用户代理无关。我在 fireFox 中切换了 UA,关闭了 javascript,它仍然符合 HTTP2。

以上是关于cURL 不适用于 nghttp2的主要内容,如果未能解决你的问题,请参考以下文章

cURL 不适用于 nghttp2

PHP curl 不适用于 Windows 和 Apache

CURL PHP 不适用于 WAMP 和 XAMPP

为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?

客户端凭据流适用于 curl 但不适用于浏览器

cURL - 文件路径位置的文件上传不适用于 Windows 命令提示符