在命令行中, 有办法让 CURL 把 HTTP2 Multiplexing 特性用上么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
5bb864e1fc775087
V2EX    问与答

在命令行中, 有办法让 CURL 把 HTTP2 Multiplexing 特性用上

  •  
  •   5bb864e1fc775087 2023-04-25 13:05:09 +08:00 1694 次点击
    这是一个创建于 966 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请求 https://bing.com 在 POSTMAN 里耗时 60ms 左右 , 而在 curl 命令行里却要 200ms
    我怀疑是 TCP 链接没有复用, 每次执行 curl 命令都要重建 TCP 链接导致的, 所以想试着开启 HTTP2 Multiplexing, 官网倒是有介绍, https://curl.se/docs/http2.html 但不知道怎么开, 以及能不能在命令行中开启

    以下是 CURL 命令和所输出的结果

    curl \ -w "time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_appconnect: %{time_appconnect}\n time_redirect: %{time_redirect}\n time_pretransfer: %{time_pretransfer}\n time_starttransfer: %{time_starttransfer}\n time_total: %{time_total}\n" \ -o /dev/null -s \ --http2 \ 'https://bing.com' 
    time_namelookup: 0.010229 time_connect: 0.069974 time_appconnect: 0.195230 time_redirect: 0.000000 time_pretransfer: 0.195348 time_starttransfer: 0.257910 time_total: 0.257964 
    10 条回复    2023-04-25 16:42:18 +08:00
    0o0O0o0O0o
        1
    0o0O0o0O0o  
       2023-04-25 13:09:05 +08:00 via iPhone
    跟多个 url 就可以了吧
    5bb864e1fc775087
        2
    5bb864e1fc775087  
    OP
       2023-04-25 13:34:42 +08:00
    @0o0O0o0O0o 我没说清楚, 我是想实现第二次执行命令去请求 bing.com 的时候能复用第一次的 TCP 链接
    leozzf
        3
    leozzf  
       2023-04-25 13:43:34 +08:00 via Android
    那你得把 curl 作为一个 daemon 后台进程使用
    crystom
        4
    crystom  
       2023-04-25 13:49:31 +08:00
    这跟 http2 没关系,只需要 http1.1 就能复用,但是命令行中确实几次 curl 之间没法复用
    tf2
        5
    tf2  
       2023-04-25 13:53:34 +08:00
    @5bb864e1fc775087 原理上来说几乎不可能了。一个连接必须对应一个进程。进程没了,fd 就被销毁了。第二个进程没法接着用。除非你用了什么 trick
    0o0O0o0O0o
        6
    0o0O0o0O0o  
       2023-04-25 13:56:03 +08:00 via iPhone
    @5bb864e1fc775087 我就是这个意思,一条命令里接多个 bing.com 的 url ,第一个 url 以后的请求就可以复用 connection 了吧,verbose 应该能观察到。
    hahastudio
        7
    hahastudio  
       2023-04-25 14:00:01 +08:00
    https://curl.se/docs/manpage.html 里面提到的 --next ?然后我猜应该不需要用 --parallel-immediate ?
    你给的文档我猜是调用 libcurl 时候才去看的
    tool2d
        8
    tool2d  
       2023-04-25 14:11:50 +08:00
    @crystom "这跟 http2 没关系,只需要 http1.1 就能复用"

    还有一点区别的,http1.1 只是复用 socket 连接。而 http2 会复用压缩字典,让后面头部压缩数据传输量,异常的小。
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       2023-04-25 16:27:18 +08:00
    只是复用连接,http1.1 就可以

    curl -v --http1.1 -o /dev/null -sI https://www.bing.com https://www.bing.com https://www.bing.com 2>&1 | grep -w 'multiplex\|connection'

    看 multiplexing 支持

    curl -v --http2 -o /dev/null -sI https://www.bing.com https://www.bing.com https://www.bing.com 2>&1 | grep -w 'multiplex\|connection'
    lhbc
        10
    lhbc  
       2023-04-25 16:42:18 +08:00 via Android
    复用 TCP 连接本来就支持
    https://everything.curl.dev/usingcurl/persist

    复用头部动态压缩表还有多路复用,是不行的,进程都退出了,内存都归还了,除非做成守护进程
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 10:09 PVG 18:09 LAX 02:09 JFK 05:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86