With HTTP/1.1 the lack of "Connection: close" header on the server (or client) side means that the connection should stay open (aka persistent connections).
The HTTP spec indicates that to support persistent connections, the signal/event indicating the end of the request or end of the response are important.
For example: If you have a persistent connection (no "Connection: close"), and a response without a "Content-Length" header this "end of response" event can only be conveyed via a Chunked Transfer Encoding (which sends a trailer indicating that the content is complete)
However, if you decide to not use persistent connections by using the "Connection: close" header then event is the actual connection disconnect.
But this is inferior to Chunked Transfer Encoding as other parts of the HTTP spec says a connection disconnect can occur at any time, even before the response content has completely been sent, leaving you with no knowledge in the HTTP protocol that the response body was completely sent.
Incidentally, HAProxy 1.7+ supports compression of chunked proxy responses.
But why do you use HAproxy for compression? Jetty 9 has a very capable compression interceptor for responses?
The compression interceptor in Jetty 9 is also capable of cooperating with the ETag / if-modified-since behavior found across Jetty internals (like the DefaultServlet / memory-mapped static file serving / traditional static file serving / and precompressed content behaviors)