当我使用 make menuconfig 编译 OpenWrt 映像时,我会选中 libcurl 框,然后选中添加 HTTP/2 支持的框,并确保还选中了 nghttp2 库。在发出请求的代码中,我将 CURLOPT_HTTP_VERSION 设置为 CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE,因为我的服务器确实在所有浏览器请求上使用 HTTP/2,并且它通过 https 进行。
为了测试,我在支持 HTTP/2 的 Ubuntu 机器上编译了 curl,并向我在 OpenWrt 中请求的相同 URL 发出了 POST 请求,请求使用了 HTTP/2。OpenWrt 中的 HTTP/2 是否存在已知问题?或者这是其他人遇到并已修复的问题?没有有用的调试数据,我已经全部挖掘出来了,有点不知所措。
我正在使用 mbedTLS 作为我的 TLS/SSL 后端,以防有用。
编辑了更多信息:运行此代码片段:
printf("%d\n", curl_version_info(CURLVERSION_NOW)->features & CURL_VERSION_HTTP2);
并打印0
,然后运行:
printf("%d\n", curl_version_info(CURLVERSION_NOW)->features & CURL_VERSION_SSL);
并打印了4
。因此,尽管我在编译映像时包含了 libcurl、选中了 http2 支持并选中了 SSL 支持,但实际上只包含了 SSL。但是,.so
mbedtls 和 libnghttp2 都有 。
任何帮助都会有用。