Skip to content

Connection reset on HTTP/2 when using CompressionHandler with default WindowRateControl #13849

@ivosek

Description

@ivosek

Jetty version(s)
Jetty 12.1.3 embedded

Jetty Environment
ee10, ee11 (ee8 and ee9 are unaffected)

HTTP version
HTTP 2

Java version/vendor

openjdk version "21.0.5" 2024-10-15 LTS
OpenJDK Runtime Environment Temurin-21.0.5+11 (build 21.0.5+11-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.5+11 (build 21.0.5+11-LTS, mixed mode, sharing)

OS type/version
Ubuntu 24.04.3 LTS

Description

We tried to migrate from Jetty 12.0.29 to 12.1.3 and when CompressionHandler is used, requests starts to break due to connection resets.

Problem is not present:

  • on Jetty 12.0.29 with GzipHandler and HTTP/2
  • on Jetty 12.1.3 with CompressionHandler and HTTP 1.1
  • on Jetty 12.1.3 without CompressionHandler and with HTTP/2

I have also tried it with the fix from #13812 and it still fails.

It fails every time when it serves development version of our frontend (huge amount of .dcc.js files) but with production release it seems to be working well.

When we were trying to create minimal reproducion sample we found out it works well when we added:

h2.setRateControlFactory(new WindowRateControl.Factory(1024));

(We added this line just by luck because @lorban suggested this line while we were preparing minimal reproduction sample for another issue half year ago - see #12776)

So this might not be a bug but feature.

In org.eclipse.jetty.http2.server.AbstractHTTP2ServerConnectionFactory I can see that default value is new WindowRateControl.Factory(128).

My questions:

  • Isn't this default value set too low, when single web browser client session can hit this limitation?
  • Why this happens only when CompressionHandler is used? Even when we tried to change this value to WindowRateControl.Factory(4) it never fails when CompressionHandler is not used.
  • Why this does not occurs on Jetty 12.0.x when there is also default value WindowRateControl.Factory(128)?

How to reproduce?

reproduction.zip

  1. Run:
mvn compile exec:java
  1. Open web browser (Chromium based or Firefox) and open: https://localhost:9443/

Metadata

Metadata

Assignees

Labels

BugFor general bugs on Jetty side

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions