预期版本: curl-8.4.0/curl-8.10.1

依赖版本: openssl-3.3.2/nghttp2-1.62.1/nghttp3-1.5.0

参考文档:

https://curl.se/docs/http3.html

根据官方文档和Curl的版本更新记录来看, 8.4.0 版本想通过openssl的方案支持http3是不可行的。

版本更新记录: https://curl.se/changes.html

8.6.0 版本才支持openssl-3.2用QUIC实现HTTP3:

8.6.0 版本修改HTTP3.md文件更新Diff:

从这里可以看出来,直到8.6.0版本curl库才支持了openssl+nghttp3的QUIC方案。

 

8.9.0 版本将QUIC的要求提高到了3.3版本:

8.10.0 版本修复了openssl关于quic的内存泄露:

8.10.1 版本修改了CMake编译时关于openssl的行为:

 

依赖环境

 

编译 Openssl-3.3.2:

【编译】openssl 3.3.2

 

编译 nghttp2-1.62.1:

CMake编译,只编译nghttp2,不需要动态库,只需要静态库。

增加一个nghttp2指向nghttp2-1.62.1的链接

增加一个lib指向lib64的链接,否则curl会无法找到nghttp2。

 

编译 nghttp3-1.5.0:

根据文档,http3需要依赖 nghttp3,文档里没有写需要编译ngtcp2。

同样只需要静态库, 不需要动态库。

增加一个nghttp3指向nghttp3-1.5.0的链接

 

编译 ngtcp2-1.7.0:

我删掉了这里的编译方案。

因为预期的方案是采用 openssl+nghttp3 支持QUIC。

需要 8.10.1 及以后的版本才能实现。

 

编译Curl

编译 Curl-8.4.0:

8.4.0版本的编译只考虑http2,只编译静态库。

 

编译 Curl-8.10.1:

8.10.1版本的编译考虑http2/http3, 只编译静态库。

这里还禁用了psl库, 该库主要提升了应用程序在处理域名、Cookie 和相关网络请求时的安全性和准确性。(我们用不上)

 

环境配置:

通过软连接的方式将 curl 指向需要的 curl版本,这里为了测试http3, 我使用的是8.10.1版本。

修改环境变量,将以下内容添加到 ~/.bashrc 或 /etc/profile 中:

安装完毕

 

测试:

使用--noproxy '*'是为了关闭代理。

【编译】curl 支持 HTTP2/HTTP3
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论