0

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

这个 api 在大多数情况下都可以工作,但对于少数客户端,它会给出 400 - 错误请求。

我们已经验证客户端正确发送请求但得到 400 作为响应。

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

在 Handler 的第一行有一条日志语句,它没有为 400 - Bad Request case 打印,并且正在为所有成功的请求打印它。

4

1 回答 1

1

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

默认情况下,vertx 接受总 Header 大小为 8kb 的请求。在某些情况下,标头中的 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");
            });
于 2019-11-12T17:25:21.607 回答