为什么curl在mac上使用HTTP / 1.1而不是HTTP / 2?

根据这个 https://curl.haxx.se/docs/http2.html

从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(例如使用https://tools.keycdn.com/http2-test测试)我得到:

curl -I http://www.google.co.uk 
HTTP/1.1 200 OK

curl --http2 -v http://www.google.co.uk
curl: (1) Unsupported protocol

知道为什么它使用HTTP / 1.1而不是HTTP / 2?

解决方法

您可以构建curl以使用许多不同的TLS / SSL库中的一个,每个库都具有稍微不同的功能集,并为curl提供稍微不同的条件.

您在问题中显示的卷曲将SecureTransport列为其构建使用的TLS库,即macOS本机TLS库.

安全传输根本不提供卷曲通过TLS协商HTTP / 2的必要手段 – 或者至少它没有,因为我被告知最新版本现在支持ALPN所以未来的卷曲版本应该能够即使使用安全传输,也可通过TLS执行HTTP / 2.

除了正确的TLS协商之外,curl还需要说HTTP / 2,感谢使用古老的nghttp2库,这是第二个依赖,需要curl才能说HTTP / 2.存在nghttp2时,即使TLS库无法正确协商ALPN,curl实际上也可以通过纯文本HTTP说HTTP / 2.

固定?

如果您选择使用其他TLS库(例如OpenSSL,GnuTLS或NSS)重新构建curl,那么它今天就可以通过HTTPS说HTTP / 2了.

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...