首页 > 在CentOS 6.8 x86_64上安装nghttp2最新版及让curl具有http2特性

在CentOS 6.8 x86_64上安装nghttp2最新版及让curl具有http2特性

nghttp2是什么?

nghttp2是一个实现IETF官方HTTP/2和HPACK头压缩算法的C库,但不限如此,在C库基础上,还实现了http2的客户端,服务器,代理服务器,以及压测工具。参见官网链接

http://www.nghttp2.org/

目前最新版本是1.24.0

https://github.com/nghttp2/nghttp2/releases



网上基本上都是在Ubuntu平台上安装nghttp2,比如,我按照下面的链接在Ubuntu 16.04.1 LTS上顺利安装了nghttp2

http://www.linuxidc.com/Linux/2016-01/127588.htm



安装之前的准备

升级Autoconf 2.63到2.69

http://blog.csdn.net/tao_627/article/details/77259591

升级GCC 4.4.7到4.9.2(通过devtoolset)

http://blog.csdn.net/tao_627/article/details/77260963



安装相关依赖库

sudo yum -y groupinstall "Development Tools"

sudo yum -y install openssl-devel libxml2-devel libev-devel jemalloc-devel python-devel

wget https://c-ares.haxx.se/download/c-ares-1.12.0.tar.gz -O /tmp/c-ares.tar.gz

mkdir -p /tmp/c-ares

tar -zxvf /tmp/c-ares.tar.gz -C /tmp/c-ares --strip-components=1

cd /tmp/c-ares && ./configure --libdir=/usr/lib64

make

sudo make install

wget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz -O /tmp/jansson.tar.gz

mkdir -p /tmp/jansson

tar -zxvf /tmp/jansson.tar.gz -C /tmp/jansson --strip-components=1

cd /tmp/jansson && ./configure --libdir=/usr/lib64

make

make check

sudo make install



下面编译nghttp2最新版

wget https://github.com/nghttp2/nghttp2/releases/download/v1.24.0/nghttp2-1.24.0.tar.bz2

tar jxvf nghttp2-1.24.0.tar.bz2

cd nghttp2-1.24.0

./configure

make

make install

这里只是安装的库,在/usr/local/lib/libnghttp2.so,头文件在/usr/local/include/nghttp2



更新动态库

vim /etc/ld.so.conf

添加‘/usr/local/lib’

更新配置文件,执行ldconfig



注意:nghttp2本身就是一个http2的巨大宝库,这里我们仅是简单用到它的动态库。有兴趣的可以继续研究它的其它应用。



下面将nghttp2添加进curl中,使curl带有HTTP2特性

从官网下载最新版curl源码

wget https://curl.haxx.se/download/curl-7.55.1.tar.bz2

tar jxvf curl-7.55.1.tar.bz2

cd curl-7.55.1

./configure --with-nghttp2=/usr/local --with-ssl

make

make install



必要时修改环境变量

echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf

ldconfig

更新动态库



遇到的问题

在源码编译curl时,执行configure命令遇到

checking run-time libs availability... failed

configure: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lnghttp2   -lssl -lcrypto -lssl -lcrypto   -lz -lrt

解决方法

刚才安装的动态库没有刷新到系统中,导致编译curl时没有找到

vim /etc/ld.so.conf

添加‘/usr/local/lib’

更新配置文件,执行ldconfig

查找下面的库是否已经找到

ldconfig -p | grep --color libnghttp2





验证

查看 curl 版本时会发布特性中会增加 HTTP2 功能支持。此时 –http2 参数就可以正常使用了:



测试curl with http2

我们再使用如下命令测试

curl --http2 -I https://nghttp2.org/





curl --http2 -vo test.out https://nghttp2.org/

我们可以看到详细的交互信息







参考文献

http://blog.csdn.net/freewebsys/article/details/59112145

https://wzyboy.im/post/1052.html



官网RFC

https://tools.ietf.org/html/rfc7540    HTTP/2

https://tools.ietf.org/html/rfc7541    HPACK

https://tools.ietf.org/html/rfc7838    HTTP Alternative Services



其它参考资料(由浅入深)

http://www.cnblogs.com/zlingh/p/5887143.html                    HTTP 2.0的那些事

https://bagder.gitbooks.io/http2-explained/zh/                       http2讲解

High Performanc Browser Networking(Web性能权威指南)   第12章

https://hpbn.co/http2/                                                             电子书最新版本

更多相关:

  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、IoT、云原生、数...

  • c++ https://www.cnblogs.com/riddick/p/8486223.html python 原理:https://zhuanlan.zhihu.com/p/94244568 代码:https://github.com/1368069096/Calibration_ZhangZhengyou_Met...

  • https://zhuanlan.zhihu.com/p/60962760 https://blog.csdn.net/qq_35644234/article/details/53013738 https://blog.csdn.net/u012285643/article/details/78524758...

  • colmap-3.6-dev工程第三方依赖库 Eigen==3.3.7 https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zipFreeImage==3.17.0 https://github.com/twnkls/FreeImage-3.17.0-VS...

  • 理论知识和其它实现算法可参考: https://stackoverflow.com/questions/29678510/convert-21-equirectangular-panorama-to-cube-map http://paulbourke.net/dome/dualfish2sphere/ 如果着急输出Cub...

  • 使用内部存储结构为栈的方法实现一个队列,要求实现该队列的如下方法: 1.push(x) : 将元素x压入队列中 2.pop() : 弹出(移除)队列头部元素 3.peek() : 返回队列头部元素(即为front) 4.empty() : 判断队列是否是空 栈的数据结构为先入后出,队列的数据结构为先入先出 使用栈来实现队列,同样想要...