我正在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文件):
还有第二种情况的图像(相同的javascript文件):
有一种方法可以在压缩(gzip)处于活动状态时从服务器发送content-length
标头?
我在Netty仓库中发现了this PR,所以我认为Netty确实允许这种行为,并且Vertx没有发送标题。
谢谢。