jetty / jetty.project

Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more
https://eclipse.dev/jetty
Other
3.86k stars 1.91k forks source link

Allow headers size extend to maxRequestHeadersSize in http client #12436

Open shaoxt opened 2 weeks ago

shaoxt commented 2 weeks ago

Jetty version(s) Jetty Version 10-12

Enhancement Description

In HttpSenderOverHTTP and HttpClient, there is a "headerBuffer" which allocated by the "httpclient.getRequestBufferSize". If the buffer overflowed, there will be an IllegalArgumentException("Request header too large"). To support higher headers, for examples 32K or 64K, has to set the request buffer size higher accordingly right now.

But 99% use cases, we don't need such high headerBuffer. Also when backend connections stuck, these high buffer will bump up the memory consumption significantly.

The enhancement will be have a new limit for headers, it will be "httpclient.maxRequestHeadersSize". The headerBuffer still starts will the "httpclient.getRequestBufferSize". While the headerBuffer runs into overflow state. The headerBuffer will be allocated as "httpclient.maxRequestHeadersSize", and continue the flow.

In this case, 99% use cases can be covered by smaller header buffer, and 1% cases run into buffer extension.