Vert.x GET api returns 某些流量的 400 错误请求

Vert.x GET api returns 400 Bad Request for some traffic

我们有一个 Vert.x 应用程序,我们在其中托管了几个 HTTP GET 和 POST api。在生产测试中,我们面临一个问题,即一个 GET api 对客户端的响应是 400 - Bad Request.

这个 api 大多数时候都有效,但对于少数客户,它会给出 400 - Bad Request。

我们已验证客户端正在正确发送请求但收到 400 响应。

但是在应用程序所在的服务器上 运行 我们找不到任何日志。

在 Handler 的第一行有一个日志语句,它没有为 400 - Bad Request 案例打印,而是为所有成功的请求打印。

经过大量调试后,我们发现请求正在到达 vertx 应用程序,而路由器正在拒绝请求并返回 400 - Bad Request。

默认情况下,vertx 接受总 Header 大小为 8kb 的请求。在某些情况下,Header 中的 Cookie 大小超过 8KB,因此会出现错误。

我们可以覆盖 HttpServerOptions 中的 Header 大小限制。问题解决后。

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