首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grizzly:非法尝试超过配置的最大页眉数

Grizzly:非法尝试超过配置的最大页眉数
EN

Stack Overflow用户
提问于 2017-04-25 05:54:46
回答 1查看 597关注 0票数 1

我在RESTful web服务服务器应用程序中使用Grizzly/泽西/Jackson。对于某些交互,可能会在响应中返回大量HTTP报头。默认情况下,Grizzy将响应头的最大数目设置为100。

读取灰色Http服务器框架概述时,似乎可以以某种方式配置响应发送给客户端的最大头数(Http服务器框架概述),但当Grizzly与泽西岛堆叠在一起时,还不清楚这是如何实现的。

对于如何设置此配置有任何建议吗?

这就是我目前配置Grizzly和Jackson的方式:

代码语言:javascript
复制
packages(true, Config.CONFIG_RESOURCE_BASE_PACKAGE);
register(JacksonFeature.class);
register(GrizzlyHttpContainerProvider.class);
register(CustomInjectables.class);
register(RolesAllowedDynamicFeature.class);
register(AccessSecurityFilter.class);

String host = Config.get("webserver.address");
int port = Config.getInteger("webserver.port");
boolean secure = Config.getBoolean("webserver.secure");

if (secure) {
    SSLContextConfigurator sslContextConfigurator = new SSLContextConfigurator();
    sslContextConfigurator.setKeyStoreFile(Config
            .get("webserver.keystore.location"));
    sslContextConfigurator.setKeyStorePass(Config
            .get("webserver.keystore.password"));

    boolean clientMode = false;
    boolean needClientAuth = false;
    boolean wantClientAuth = false;
    SSLEngineConfigurator sslEngineConfigurator = new SSLEngineConfigurator(
            sslContextConfigurator, clientMode, needClientAuth,
            wantClientAuth);

    URI uri = URI.create("https://" + host + ":" + port);
    log.info("Starting web server (secure): " + uri + " ...");
    server = GrizzlyHttpServerFactory.createHttpServer(uri, this, true,
            sslEngineConfigurator, true);
} else {
    URI uri = URI.create("http://" + host + ":" + port);
    log.info("Starting web server: " + uri + " ...");
    server = GrizzlyHttpServerFactory.createHttpServer(uri, this, true);
}

这是当我超过响应头的最大数量时的堆栈:

代码语言:javascript
复制
Apr 24, 2017 10:28:46 PM org.glassfish.grizzly.filterchain.DefaultFilterChain execute
WARNING: GRIZZLY0013: Exception during FilterChain execution
org.glassfish.grizzly.http.util.MimeHeaders$MaxHeaderCountExceededException: Illegal attempt to exceed the configured maximum number of headers: 100
    at org.glassfish.grizzly.http.util.MimeHeaders.createHeader(MimeHeaders.java:396)
    at org.glassfish.grizzly.http.util.MimeHeaders.setValue(MimeHeaders.java:498)
    at org.glassfish.grizzly.http.HttpServerFilter.prepareResponse(HttpServerFilter.java:944)
    at org.glassfish.grizzly.http.HttpServerFilter.encodeHttpPacket(HttpServerFilter.java:834)
    at org.glassfish.grizzly.http.HttpCodecFilter.handleWrite(HttpCodecFilter.java:1407)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:890)
    at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:858)
    at org.glassfish.grizzly.http.io.OutputBuffer.flushBuffer(OutputBuffer.java:1029)
    at org.glassfish.grizzly.http.io.OutputBuffer.flushBinaryBuffers(OutputBuffer.java:1016)
    at org.glassfish.grizzly.http.io.OutputBuffer.flushAllBuffers(OutputBuffer.java:987)
    at org.glassfish.grizzly.http.io.OutputBuffer.close(OutputBuffer.java:716)
    at org.glassfish.grizzly.http.server.NIOWriterImpl.close(NIOWriterImpl.java:111)
    at org.glassfish.grizzly.http.server.util.HtmlHelper.sendErrorPage(HtmlHelper.java:103)
    at org.glassfish.grizzly.http.server.Response.sendError(Response.java:1358)
    at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer$ResponseWriter.failure(GrizzlyHttpContainer.java:287)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:486)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:316)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:291)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1140)
    at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:375)
    at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:224)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Unknown Source)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-25 06:39:06

您需要做的第一件事是,当您调用createHttpServer时,服务器不会自动启动。目前,您正在传递true作为最后一个参数,也就是说应该自动启动。此配置已经是默认配置。因此,它主要用于将值设置为false,意思是不要自动启动。因此,将该值设置为false

现在服务器不是自动启动的,我们可以配置它。setMaxResponseHeader的特定配置是NetworkListener上的配置。你可以从HttpServer那里得到它。

代码语言:javascript
复制
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(...);
final NetworkListener listener = server.getListener("grizzly");
listener.setMaxResponseHeaders(300);
server.start();

现在,我们在配置之后手动启动服务器。有一件事我不确定是否有更好的方法让听众。我只是对"grizzly"进行了硬编码,因为我之前所做的只是遍历server.getListeners()并打印出所有的名称,并且看到"grizzly"是唯一可用的。所以这就是我以前测试过的。

除了NetworkListener配置之外,还可以通过ServerConfiguration进行其他与服务器相关的配置。您可以使用server.getServerConfiguration()获得

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43602690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档