Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added HTTP input buffer size to HttpConfiguration #12466

Merged
merged 4 commits into from
Nov 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ protected AbstractHTTP2ServerConnectionFactory(@Name("config") HttpConfiguration
setInputBufferSize(Frame.DEFAULT_MAX_SIZE + Frame.HEADER_LENGTH);
setUseInputDirectByteBuffers(httpConfiguration.isUseInputDirectByteBuffers());
setUseOutputDirectByteBuffers(httpConfiguration.isUseOutputDirectByteBuffers());
setInputBufferSize(httpConfiguration.getInputBufferSize());
}

@Override
public void setInputBufferSize(int size)
{
super.setInputBufferSize(size);
httpConfiguration.setInputBufferSize(size);
}

@Override
public int getInputBufferSize()
{
return httpConfiguration.getInputBufferSize();
}

@ManagedAttribute("The HPACK encoder dynamic table maximum capacity")
Expand Down Expand Up @@ -327,7 +341,7 @@ public Connection newConnection(Connector connector, EndPoint endPoint)
session.setConnectProtocolEnabled(isConnectProtocolEnabled());

HTTP2Connection connection = new HTTP2ServerConnection(connector,
endPoint, httpConfiguration, session, getInputBufferSize(), listener);
endPoint, httpConfiguration, session, listener);
connection.setUseInputDirectByteBuffers(isUseInputDirectByteBuffers());
connection.setUseOutputDirectByteBuffers(isUseOutputDirectByteBuffers());
connection.addEventListener(sessionContainer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection
private final SocketAddress remoteSocketAddress;
private boolean recycleHttpChannels;

public HTTP2ServerConnection(Connector connector, EndPoint endPoint, HttpConfiguration httpConfig, HTTP2ServerSession session, int inputBufferSize, ServerSessionListener listener)
public HTTP2ServerConnection(Connector connector, EndPoint endPoint, HttpConfiguration httpConfig, HTTP2ServerSession session, ServerSessionListener listener)
{
super(connector.getByteBufferPool(), connector.getExecutor(), endPoint, session, inputBufferSize);
super(connector.getByteBufferPool(), connector.getExecutor(), endPoint, session, httpConfig.getInputBufferSize());
this.connector = connector;
this.listener = listener;
this.httpConfig = httpConfig;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,22 @@ public AbstractHTTP3ServerConnectionFactory(ServerQuicConfiguration quicConfigur
http3Configuration.setUseOutputDirectByteBuffers(httpConfiguration.isUseOutputDirectByteBuffers());
http3Configuration.setMaxRequestHeadersSize(httpConfiguration.getRequestHeaderSize());
http3Configuration.setMaxResponseHeadersSize(httpConfiguration.getResponseHeaderSize());
http3Configuration.setInputBufferSize(httpConfiguration.getInputBufferSize());
setInputBufferSize(http3Configuration.getInputBufferSize());
}

@Override
public void setInputBufferSize(int size)
{
super.setInputBufferSize(size);
httpConfiguration.setInputBufferSize(size);
http3Configuration.setInputBufferSize(size);
}

@Override
public int getInputBufferSize()
{
return httpConfiguration.getInputBufferSize();
}

public ServerQuicConfiguration getQuicConfiguration()
Expand Down
1 change: 1 addition & 0 deletions jetty-core/jetty-server/src/main/config/etc/jetty.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme" property="jetty.httpConfig.secureScheme"/>
<Set name="securePort" property="jetty.httpConfig.securePort"/>
<Set name="inputBufferSize" property="jetty.httpConfig.inputBufferSize"/>
<Set name="outputBufferSize" property="jetty.httpConfig.outputBufferSize"/>
<Set name="outputAggregationSize" property="jetty.httpConfig.outputAggregationSize"/>
<Set name="requestHeaderSize" property="jetty.httpConfig.requestHeaderSize"/>
Expand Down
3 changes: 3 additions & 0 deletions jetty-core/jetty-server/src/main/config/modules/server.mod
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ etc/jetty.xml
## Port to use to build URIs for secure redirects
# jetty.httpConfig.securePort=8443

## Input buffer size (in bytes), used if not overridden by TLS or other concerns
# jetty.httpConfig.inputBufferSize=8192

## Response content buffer size (in bytes)
# jetty.httpConfig.outputBufferSize=32768

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public class HttpConfiguration implements Dumpable
.mutable()
.build();
private final List<ComplianceViolation.Listener> _complianceViolationListeners = new ArrayList<>();
private int _inputBufferSize = 8 * 1024;
private int _outputBufferSize = 32 * 1024;
private int _outputAggregationSize = _outputBufferSize / 4;
private int _requestHeaderSize = 8 * 1024;
Expand Down Expand Up @@ -134,6 +135,7 @@ public HttpConfiguration(HttpConfiguration config)
{
_formEncodedMethods.put(s, Boolean.TRUE);
}
_inputBufferSize = config._inputBufferSize;
_outputBufferSize = config._outputBufferSize;
_outputAggregationSize = config._outputAggregationSize;
_requestHeaderSize = config._requestHeaderSize;
Expand Down Expand Up @@ -201,6 +203,12 @@ public boolean removeCustomizer(Customizer customizer)
return _customizers.remove(customizer);
}

@ManagedAttribute("The size in bytes of the input buffer used to read HTTP requests")
public int getInputBufferSize()
{
return _inputBufferSize;
}

@ManagedAttribute("The size in bytes of the output buffer used to aggregate HTTP output")
public int getOutputBufferSize()
{
Expand Down Expand Up @@ -401,6 +409,15 @@ public void setCustomizers(List<Customizer> customizers)
_customizers.addAll(customizers);
}

/**
* Set the size of the buffer into which HTTP request are read.
* @param inputBufferSize buffer size in bytes.
*/
public void setInputBufferSize(int inputBufferSize)
{
_inputBufferSize = inputBufferSize;
}

/**
* Set the size of the buffer into which response content is aggregated
* before being sent to the client. A larger buffer can improve performance by allowing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@ public HttpConnectionFactory(@Name("config") HttpConfiguration config)
installBean(_config);
setUseInputDirectByteBuffers(_config.isUseInputDirectByteBuffers());
setUseOutputDirectByteBuffers(_config.isUseOutputDirectByteBuffers());
setInputBufferSize(_config.getInputBufferSize());
}

@Override
public void setInputBufferSize(int size)
{
super.setInputBufferSize(size);
_config.setInputBufferSize(size);
}

@Override
public int getInputBufferSize()
{
return _config.getInputBufferSize();
}

@Override
Expand Down
Loading