Curl 如何使用HTTP/2';什么是卷曲?

Curl 如何使用HTTP/2';什么是卷曲?,curl,push,http2,Curl,Push,Http2,我一直在研究如何使用HTTP/2的推送功能,以减少发出的GET请求数量和特定客户机-服务器实现中的平均感知延迟。现有客户机严重依赖于使用curl发出GET请求,我需要能够重用当前的实现。curl的最新版本依赖于底层的nghttp2模块,提供了对HTTP/2的支持。使用现有的nghttp2服务器: nghttpd -d /var/www/html/ 3000 local.key local.crt nghttp和curl都可用于获取示例文本文件的内容: nghttp https://localh

我一直在研究如何使用HTTP/2的推送功能,以减少发出的GET请求数量和特定客户机-服务器实现中的平均感知延迟。现有客户机严重依赖于使用curl发出GET请求,我需要能够重用当前的实现。curl的最新版本依赖于底层的nghttp2模块,提供了对HTTP/2的支持。使用现有的nghttp2服务器:

nghttpd -d /var/www/html/ 3000 local.key local.crt
nghttp和curl都可用于获取示例文本文件的内容:

nghttp https://localhost:3000/text.txt
This is some sample text.

curl https://localhost:3000/text.txt -k --http2
This is some sample text.
但是,使用nghttp2的推送功能,推送另一个文本文件时:

nghttpd -d /var/www/html/ -p/text.txt=/text2.txt 3000 local.key local.crt
curl似乎无法处理推送的资源:

nghttp https://localhost:3000/bbb/text.txt
This is some sample text.
This is some sample text as well.

curl https://localhost:3000/text.txt -k --http2 -v
...
* nghttp2_session_mem_recv() returns 268
* before_frame_send() was called
* on_frame_send() was called
* on_stream_close() was called, error_code = 1
* before_frame_send() was called
* on_frame_send() was called
* on_stream_close() was called, error_code = 1
* Connection #0 to host localhost left intact
实际上,在服务器端,针对两个打开的流接收到两个重置:

[id=1] [331.593] recv RST_STREAM frame <length=4, flags=0x00, stream_id=1>
      (error_code=PROTOCOL_ERROR(0x01))
[id=1] [331.594] recv RST_STREAM frame <length=4, flags=0x00, stream_id=2>
      (error_code=PROTOCOL_ERROR(0x01))
[id=1] [331.594] closed
[id=1][331.593]recv RST\u流帧
(错误代码=协议错误(0x01))
[id=1][331.594]recv RST_流帧
(错误代码=协议错误(0x01))
[id=1][331.594]已关闭
有没有办法将curl与HTTP/2推送功能结合使用?

curl(命令行工具)还不支持HTTP/2推送


您只能在使用libcurl执行HTTP/2时使用它,而不能使用命令行工具。

从今天起,
curl
支持HTTP/2推送吗?@ldclakmal我想它支持:我在一些安装(pi3上的7.52.1)中确认它也获取推送的资源。在其他一些平台上,虽然它不支持(例如Ubuntu 20上的7.68.0,或windows上的7.76.0),所以我不确定那里发生了什么。curl,命令行工具,仍然不支持HTTP/2推送。