我在 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 文件):
content-length
当压缩(gzip)处于活动状态时,有一种方法可以从服务器发送标头吗?
我在 Netty 存储库中找到了这个 PR,所以我假设 Netty 确实允许这种行为,并且 Vertx 没有发送标头。
谢谢。