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.
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.