Sparkjava Error: org.eclipse.jetty.http.HttpParser - Header is too large >8192
Sparkjava Error: org.eclipse.jetty.http.HttpParser - Header is too large >8192
我们正在开发基于sparkjava框架的内部web组件,使用HTTP GET而不是POST为了方便。
当请求URL包含大数据(超过8K)时返回错误如下:
org.eclipse.jetty.http.HttpParser - Header is too large >8192
.
如何解决?
Sparkjava 在嵌入式 Jetty 服务器上运行,但大多数 Jetty 配置在 sparkjava 框架中默认是硬编码的。
一种解决方案是自定义 EmbeddedServerFactory:
static Server server = null;
private static void startup() {
EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, createEmbeddedServerFactory());
awaitInitialization();
Stream.of(server.getConnectors()).map(Connector::getConnectionFactories).flatMap(Collection::stream)
.filter(t -> t.getClass().isAssignableFrom(HttpConnectionFactory.class))
.map(t -> ((HttpConnectionFactory) t).getHttpConfiguration()).forEach(t -> {
t.setRequestHeaderSize(512 * 1024 * 1024);
t.setSendServerVersion(false);
t.setSendDateHeader(false);
});
}
private static EmbeddedServerFactory createEmbeddedServerFactory() {
return new EmbeddedJettyFactory(new JettyServerFactory() {
@Override
public Server create(int maxThreads, int minThreads, int threadTimeoutMillis) {
return create(maxThreads <= 0 ? null
: new QueuedThreadPool(maxThreads, minThreads, threadTimeoutMillis));
}
@Override
public Server create(ThreadPool threadPool) {
return server = new Server(threadPool);
}
});
}
我们正在开发基于sparkjava框架的内部web组件,使用HTTP GET而不是POST为了方便。
当请求URL包含大数据(超过8K)时返回错误如下:
org.eclipse.jetty.http.HttpParser - Header is too large >8192
.
如何解决?
Sparkjava 在嵌入式 Jetty 服务器上运行,但大多数 Jetty 配置在 sparkjava 框架中默认是硬编码的。
一种解决方案是自定义 EmbeddedServerFactory:
static Server server = null;
private static void startup() {
EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, createEmbeddedServerFactory());
awaitInitialization();
Stream.of(server.getConnectors()).map(Connector::getConnectionFactories).flatMap(Collection::stream)
.filter(t -> t.getClass().isAssignableFrom(HttpConnectionFactory.class))
.map(t -> ((HttpConnectionFactory) t).getHttpConfiguration()).forEach(t -> {
t.setRequestHeaderSize(512 * 1024 * 1024);
t.setSendServerVersion(false);
t.setSendDateHeader(false);
});
}
private static EmbeddedServerFactory createEmbeddedServerFactory() {
return new EmbeddedJettyFactory(new JettyServerFactory() {
@Override
public Server create(int maxThreads, int minThreads, int threadTimeoutMillis) {
return create(maxThreads <= 0 ? null
: new QueuedThreadPool(maxThreads, minThreads, threadTimeoutMillis));
}
@Override
public Server create(ThreadPool threadPool) {
return server = new Server(threadPool);
}
});
}