在Vertx Web

时间:2018-08-26 23:11:00

标签: java netty vert.x vertx-httpclient

我正在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 compression is activated

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

Netty compression is deactivated

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

我在Netty仓库中发现了this PR,所以我认为Netty确实允许这种行为,并且Vertx没有发送标题。

谢谢。

0 个答案:

没有答案