Spark java Ошибка: org.eclipse.jetty.http.HttpParser - слишком большой заголовок> 8192 - PullRequest
0 голосов
/ 09 января 2020

Мы разрабатываем внутренний веб-компонент, основанный на платформе spark java, и для удобства используется HTTP GET, но не POST.

Ошибка возвращается, когда URL-адрес запроса содержит большие данные (более 8 КБ) как следует: org.eclipse.jetty.http.HttpParser - Header is too large >8192.

Как это решить?

1 Ответ

0 голосов
/ 09 января 2020

Spark java работает на встроенном сервере Jetty, но большая часть конфигурации Jetty по умолчанию является жестким кодом в платформе spark java.

Одним из решений является настройка 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);
            }

        });
    }
...