ubuntu 16.04更新curl支持http2

前言

因为业务需要,服务器需要支持http2,但因为服务器的系统比较老(ubuntu 16.04),自带的curl并不支持http2协议,因此需要升级curl,下面记录下在升级过程中遇到的问题。

如何确认curl支不支持http2?

方法一,执行curl --http2 命令访问一个网址,如果提示Unsupported protocol,则代表不支持:

curl --http2 'https://www.google.com'
curl: (1) Unsupported protocol

方法二,执行curl --version命令,如果Features里没有HTTP2,则代表不支持:

curl --version
curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

升级curl

安装http2相关依赖
sudo apt update
sudo apt-get install nghttp2 libnghttp2-dev libssl-dev
编译安装curl
wget https://curl.se/download/curl-7.75.0.tar.gz
tar -zxvf curl-7.75.0.tar.gz
cd curl-7.75.0/
./configure --with-nghttp2 --prefix=/usr/local --with-ssl
make && sudo make install
sudo ldconfig

上面步骤,我执行完configure命令后,界面的输出是这样的:
在这里插入图片描述
HTTP2处显示no,当时就觉得不对劲,但我没有理会,继续make && make install,安装完后,执行/usr/local/bin/curl --version命令,发现果然还是不支持http2。

因为安装的是最新版的curl,所以怀着 “有没有可能是curl版本太新,系统版本太旧导致不兼容” 的疑心,重新下载了个老一点的7.66.0版本编译安装,在configure阶段看起来好像没问题了,HTTP2处会显示enabled了:
在这里插入图片描述
(执行configure后的界面输出)

本来以为成功了,谁知执行/usr/local/bin/curl --version后,界面显示:
在这里插入图片描述
提示curl and libcurl versions do not match,Features里也没有显示HTTP2

观察上方的curl版本和libcurl版本号,libcurl的版本(7.75.0)和curl的版本(7.66.0)不一致,所以提示了这个错误信息。

libcurl 7.75.0应该是刚才第一次安装curl时留下的,因为第一次安装的curl版本号也是7.75.0,那有没有方法把libcurl的版本切换到7.66.0呢?

因为新版的curl是安装到/usr/local目录的,于是到/usr/local/lib目录下瞧瞧,发现有两个libcurl.so.4.x.0
在这里插入图片描述
还有个libcurl.so.4是软链接到libcurl.so.4.7.0的,根据文件的上一次更新时间观测,libcurl.so.4.7.0是安装curl 7.75.0时创建的,而libcurl.so.4.6.0是安装curl 7.66.0时创建的,猜测是不是只要把libcurl.so.4的软链接改为libcurl.so.4.6.0,就可以解决问题了呢?

于是改了软链接,再次执行/usr/local/bin/curl --version,错误提示果然没有了,Features里也有HTTP2了:
在这里插入图片描述
访问谷歌也不会报Unsupported protocol
在这里插入图片描述

完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值