1

我在 REST 应用程序中使用Vertx 3.5.3,该应用程序还使用 Vertx Web StaticHandler处理程序提供静态文件。

我使用自己的 Vertx HttpServer 和这个配置:

HttpServerOptions httpServerOptions = new HttpServerOptions()
            .setCompressionSupported(true)
            .setCompressionLevel(7)
            .setTcpKeepAlive(true);

HttpServer httpServer = vertx.createHttpServer(httpServerOptions);
httpServer.requestStream().toObservable().subscribe(router::accept);

httpServer.listen(
            serverConfig.getPort(),
            serverConfig.getHost(),
            result -> {
                if (result.succeeded()) {
                    LOGGER.info("Server verticle is now up, listening on " 
                        + serverConfig.getHost() + ":" + serverConfig.getPort());
                } else {
                    LOGGER.error("Error starting verticle on " + serverConfig.getHost() + ":" + serverConfig.getPort(), result.cause());
                }
            });

这是 Vertx 路由器中的静态处理程序配置:

    // handler for static files
    router.route("/*")
            .handler(StaticHandler
                    .create()
                    .setAllowRootFileSystemAccess(false)
                    .setAlwaysAsyncFS(true)
                    .setCacheEntryTimeout(604800)
                    .setCachingEnabled(true)
                    .setDefaultContentEncoding("UTF-8")
                    .setDirectoryListing(false)
                    .setEnableFSTuning(true)
                    .setIncludeHidden(false)
                    .setIndexPage("index.html")
                    .setMaxAgeSeconds(604800)
                    .setSendVaryHeader(true));

这就是基本配置。

我的疑问是为什么在激活服务器的压缩(gzip)时,它不会content-length在浏览器中显示标头,而是发送标头Transfer-Encoding: chunked。当我停用服务器的压缩 (gzip) 时,服务器会发送content-length带有文件大小的标头。

第一种情况的图像(javascript文件):

Netty 压缩被激活

以及第二种情况的图像(相同的 javascript 文件):

Netty 压缩已停用

content-length当压缩(gzip)处于活动状态时,有一种方法可以从服务器发送标头吗?

我在 Netty 存储库中找到了这个 PR,所以我假设 Netty 确实允许这种行为,并且 Vertx 没有发送标头。

谢谢。

4

0 回答 0