Vert.x GET api возвращает 400 Bad Request для некоторого трафика

У нас есть приложение Vert.x, в котором мы размещаем несколько API-интерфейсов HTTP GET и POST. Во время тестирования в производственной среде мы столкнулись с проблемой, когда один ответ GET api клиенту - 400 - неверный запрос.

Этот api работает в большинстве случаев, но для некоторых клиентов он выдает 400 - неверный запрос.

Мы убедились, что клиент правильно отправляет запрос, но получает 400 в ответ.

Но на сервере, на котором запущено приложение, мы не смогли найти никаких журналов.

В первой строке Handler есть оператор журнала, который не печатается для случая 400 - Bad Request и печатается для всех успешных запросов.

1 ответ

Решение

После долгой отладки мы определили, что запросы достигают приложения vertx, а маршрутизатор отклоняет запросы с 400 - Bad Request.

По умолчанию vertx принимает запросы с общим размером заголовка 8 КБ. В некоторых случаях размер файлов cookie в заголовках превышал 8 КБ, отсюда и ошибка.

Мы можем переопределить ограничение размера заголовка в HttpServerOptions. После этого проблема была решена.

        vertx.createHttpServer
            (new HttpServerOptions().setSsl(true)
                    .setMaxHeaderSize(32 * 1024)
                    .setTcpKeepAlive(true))
            .requestHandler(router::accept)
            .listen(config().getJsonObject("http").getInteger("port"), handler -> {
                futureHttpServer.complete();
                Logger.debug("httpservice deployed");
            });
Другие вопросы по тегам