[Libwebsockets] Missing LWS_CALLBACK_HTTP_BODY_COMPLETION when using H2 https

andy at warmcat.com andy at warmcat.com
Thu Nov 18 01:47:42 CET 2021



On November 17, 2021 8:29:33 PM UTC, "Søren Holm" <sgh at sgh.dk> wrote:
>No :)

... are you sure?

Because it makes your reproducer act normally here when applied on top of main branch.

You'll need to remove the distro package, since builds default to /usr/local and packages go in /usr, and because the examples link static, be sure to rebuild them.

-Andy

>onsdag den 17. november 2021 15.16.25 CET skrev Andy Green:
>> On 11/17/21 12:28, Søren Holm wrote:
>> > Sweet - I'll kill HTTP2 for now them.
>> > 
>> > Should I reporte hte HTTP2 in a bugreport ?
>> 
>> Does this solve it for you?
>> 
>> diff --git a/lib/roles/h2/ops-h2.c b/lib/roles/h2/ops-h2.c
>> index a791081176..989cb5b95e 100644
>> --- a/lib/roles/h2/ops-h2.c
>> +++ b/lib/roles/h2/ops-h2.c
>> @@ -837,6 +837,9 @@ lws_h2_bind_for_post_before_action(struct lws *wsi)
>> 
>>                  if (hit->protocol)
>>                          name = hit->protocol;
>> +               else
>> +                       if (hit->origin_protocol == LWSMPRO_FILE)
>> +                               return 0;
>> 
>>                  pp = lws_vhost_name_to_protocol(wsi->a.vhost, name);
>>                  if (!pp) {
>> 
>> > onsdag den 17. november 2021 12.44.27 CET skrev Andy Green:
>> >> On 11/17/21 10:45, Søren Holm wrote:
>> >>> Hi
>> >>> 
>> >>> I get no LWS_CALLBACK_HTTP_BODY_COMPLETION on posts over https - I do
>> >>> however get that callback if I disable the ssl key and cert. Thereby
>> >>> running the server in http mode.
>> >>> 
>> >>> I use commandline curl for the post.
>> >>> 
>> >>> The difference as I can see is that curl somehow end up using HTTP2 on
>> >>> https, but HTTP1.1 on regular http. Forcing curl to use HTTP1.1 on the
>> >>> https brings the callback back.
>> >>> 
>> >>> So, is something fweird going on on H2?
>> >> 
>> >> It looks like some problem with how it is closed...
>> >> 
>> >>   >> curl: (92) HTTP/2 stream 1 was not closed cleanly before end of the
>> >> 
>> >> underlying stream
>> >> 
>> >>> Can I disable H2 completely without recompiling libwebsocket?
>> >> 
>> >> You can disable it for build at cmake with -DLWS_WITH_HTTP2=0.
>> >> 
>> >> To do it at runtime, at vhost creation time (or context creation time if
>> >> you just use the default vhost), you can tell the vhost what alpn
>> >> services it should offer with info->alpn.  If you leave it NULL, then it
>> >> figures out what to offer based on what roles are enabled in the build.
>> >> 
>> >> In this case if you set it to "http/1.1" it will only advertise h1 to
>> >> clients at tls level, even if h2 is actually available.
>> >> 
>> >> -Andy
>
>


More information about the Libwebsockets mailing list