为什么curl在mac上使用HTTP/1.1而不是HTTP/2?
据此,为什么curl在mac上使用HTTP/1.1而不是HTTP/2?,curl,http2,http-1.1,Curl,Http2,Http 1.1,据此, 自7.47.0以来,curl工具默认为HTTPS连接启用HTTP/2。 使用自制软件安装最新版本并检查: curl --version curl 7.54.1 (x86_64-apple-darwin15.6.0) libcurl/7.54.1 SecureTransport zlib/1.2.5 但是在启用HTTP2的URL上运行curl(例如,使用测试),我得到: 及 你知道为什么使用HTTP/1.1而不是HTTP/2吗?你可以构建curl来使用许多不同的TLS/SSL库中的一个,
自7.47.0以来,curl工具默认为HTTPS连接启用HTTP/2。
使用自制软件安装最新版本并检查:
curl --version
curl 7.54.1 (x86_64-apple-darwin15.6.0) libcurl/7.54.1 SecureTransport zlib/1.2.5
但是在启用HTTP2的URL上运行curl
(例如,使用测试),我得到:
及
你知道为什么使用HTTP/1.1而不是HTTP/2吗?你可以构建curl来使用许多不同的TLS/SSL库中的一个,每一个库都有稍微不同的功能集,并为curl提供稍微不同的工作条件 您在问题列表中显示的curl
SecureTransport
是为使用它而构建的TLS库,即macOS本机TLS库
安全传输并没有为curl提供通过TLS协商HTTP/2的必要手段,或者至少没有,因为我被告知最新版本现在支持ALPN,所以未来的curl版本应该能够通过TLS进行HTTP/2,即使使用安全传输
除了正确的TLS协商之外,curl还需要讲HTTP/2,这要感谢使用了久负盛名的nghttp2库,所以这是curl能够讲HTTP/2所需要的第二个依赖项。有了nghttp2,curl实际上可以通过纯文本HTTP讲HTTP/2,即使TLS库无法正确协商ALPN
修理
更高版本的macOS附带内置libreSSL和HTTP/2支持的curl
如果您选择使用另一个TLS库(如OpenSSL、GnuTLS或NSS)来重建curl,它现在已经可以在HTTPS上使用HTTP/2了。使用MacOS Sierra,您可以通过使用OpenSSL而不是SecureTransport来安装支持HTTP2的更新curl
brew重新安装curl——使用openssl——使用-nghttp2
brew链接卷曲--force
curl-V
应该返回如下内容:我应该注意到,MacOS的次要点更新有时会覆盖正在使用的curl版本。如果出现这种情况,只需重新运行
brew link curl--强制
并重新启动终端,以切换回支持自制HTTP2的版本。FYI在SecureTransport中启用HTTP/2协商的功能是SSLSetALPNProtocols
。它可以在iOS 11+和macOS 10.13+上使用。与此同时,苹果已经转换了,现在推出的curl是使用libressl构建的……哦。我不知道。那是。。。令人惊讶。旁注:macOS High Sierra配备了curl 7.54.0,并支持内置的HTTP2。
curl -I http://www.google.co.uk
HTTP/1.1 200 OK
curl --http2 -v http://www.google.co.uk
curl: (1) Unsupported protocol