When h2 is enabled ASP.NET WebForms behaves badly

We have installed HAProxy on our LB-cluster.
And we enabled alpn h2,http/1.1 with great success. Requests were going in as h2, all is well.

Only problem was, that in Chrome and FireFox, some requests also started to behave badly.
Now, I know ASP.NET WebForms is old and everything, but that system was started as that, and we’re slowly converting it to MVC and React.

Anyway… Sometimes, when we use “UpdatePanels” (ajax panels more or less), the requests stall, forever.
But as soon as we turn off h2, it all works perfectly again.

We’re running in http mode, since we are offloading SSL on HAProxy and have only http/1.1 backends (or else we would have to setup redundant certificates on all backend servers).

And we really don’t want to switch to tcp mode, since we want all the logs.

Has anyone else noticed that there’s trouble with ajax/postbacks (or any requests) while running in h2-mode?

HA-Proxy version 1.8.1-1 2017/12/03
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -g -O2 -fdebug-prefix-map=/build/haproxy-1.8.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Built with OpenSSL version : OpenSSL 1.1.0g  2 Nov 2017
Running on OpenSSL version : OpenSSL 1.1.0f  25 May 2017
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2
Built with Lua version : Lua 5.3.3
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND
Encrypted password support via crypt(3): yes
Built with multi-threading support.
Built with PCRE version : 8.39 2016-06-14
Running on PCRE version : 8.39 2016-06-14
PCRE library supports JIT : yes
Built with zlib version : 1.2.8
Running on zlib version : 1.2.8
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with network namespace support.

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

Available filters :
        [SPOE] spoe
        [COMP] compression
        [TRACE] trace

A lot of H2 issues have been fixed since then, can you pull from 1.8-git or use the latest snapshot:


I suppose I can try to compile it on our secondary LB first, so that I know how to “replace” the installed package, until a more stable release is released. :slight_smile:

It worked better in Chrome (only).

Edge and Firefox stopped loading at all, in Firefox I could press Ctrl+F5 to recover from a hanged request.
But that’s not anything we can tell our customers to do. :slight_smile:

So we’ll wait with h2 until we have it stable.

Are you sure there is only one haproxy instance running? Not that some old process still runs in the background, and some requests are handled by the older code?

I’m clarifying whether all the h2 fixes are in the current git tree.

Do those AJAX requests contain a body (POST, PUT, PATCH methods)? Can you share some logs?


I’m not sure that I can post any logs here. We do not currently have a test-environment that we can use. And the live-environment pushes too much data to sift through.

I killed all old HAProxy-processes before I upgraded to the version I compiled.


you may want to recheck with 1.8.2 since many H2 issues related to POST and shutdowns have been addressed.

v1.8.3 was just released, you should upgrade to that.

Thanks @lukastribus and @willy
I have upgraded to 1.8.2 from the experimental branch for Debian, and it works much better. :slight_smile: