压缩Undertow服务器响应

sip*_*uel 6 java http-compression undertow

我有一个程序化的Undertow服务器设置.静态内容也由Undertow提供,没有反向代理.Undertow启动的Java代码如下所示:

ResourceManager resourceManager = 
    new FileResourceManager(new File("deploymentDir"), 100);

DeploymentInfo servletBuilder = Servlets.deployment()
      .setResourceManager(resourceManager)
      .setDeploymentName("testDeployment")
      .setContextPath("/");

DeploymentManager manager = Servlets.defaultContainer()
      .addDeployment(servletBuilder);
manager.deploy();

Undertow.Builder builder = Undertow.builder();
builder.addHttpListener(8080, domainName);

PathHandler path = Handlers.path(Handlers.redirect("/"))
      .addPrefixPath("/", manager.start());

Undertow server = builder.setHandler(path).build();
server.start();
Run Code Online (Sandbox Code Playgroud)

我想知道一个gzip服务器如何在Undertow中响应?

谢谢,Vitaliy.

sip*_*uel 8

我不得不GzipContentEncodingTestCase在Undertow的源代码中查看它的工作原理.一个人必须EncodingHandler使用适当的参数创建一个,然后调用setNext()以便将其链接到PathHandler:

PathHandler path = Handlers.path(Handlers.redirect("/"))
    .addPrefixPath("/", manager.start());

final EncodingHandler handler = 
    new EncodingHandler(new ContentEncodingRepository()
      .addEncodingHandler("gzip", 
          new GzipEncodingProvider(), 50,
          Predicates.parse("max-content-size[5]")))
      .setNext(path);

// ...
Undertow server = builder.setHandler(handler).build();
Run Code Online (Sandbox Code Playgroud)