Sparkjava错误:org.eclipse.jetty.http.HttpParser-标头太大> 8192

问题描述 投票:0回答:1

我们正在开发基于sparkjava框架的内部Web组件,为了方便起见,使用HTTP GET而不使用POST。

当请求URL包含大数据(大于8K)时,将返回以下错误:org.eclipse.jetty.http.HttpParser - Header is too large >8192

如何解决?

jetty spark-java
1个回答
0
投票

Sparkjava在嵌入式Jetty服务器上运行,但是默认情况下,大多数sparkty配置在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);
            }

        });
    }
© www.soinside.com 2019 - 2024. All rights reserved.