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");
});