8

我们正在使用嵌入式 Jetty 9.3.1.v20150714 并遇到了问题,即我们的长查询 URL 与其他标头相结合,比允许的长。

解决方案似乎很简单:增加requestHeaderSizein HttpConfiguration. 但是我如何轻松做到这一点?我目前正在创建 a Server、 aServletContextHandler和 a ServletHolder。但是要混合自定义HttpConfiguration,我必须创建一个新的ServerConnectorandHttpConnectionFactory吗?我是否必须覆盖 HTTP 和 HTTPS 配置?如何在requestHeaderSize不重新配置所有默认值的情况下轻松更改?

4

1 回答 1

11

如果您只是设置一个属性,则可以将其设置在HttpConfiguration默认实例化的那个上:

public static void main(String[] args) throws Exception {
    Server server = new Server(8080);
    server.setHandler(new DefaultHandler()); // 404s for everything except favicon.ico

    for (Connector c : server.getConnectors()) {
        c.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setRequestHeaderSize(65535);
    }

    server.start();
    server.join();
}

您不必单独覆盖 HTTPS 配置,因为根据您对当前实例化内容的描述,您没有任何 HTTPS 连接器。即使你确实有一个 HTTPS 连接器,上面的循环也会起作用,因为ServerConnector为 HTTPS 配置的仍然会有一个关联的HttpConnectionFactory. 您可以在此示例中看到如何配置 HTTPS 连接器。

但是,自己设置必要的对象实际上并没有那么多代码:

public static void main(String[] args) throws Exception {
    Server server = new Server();
    server.setHandler(new DefaultHandler()); // 404s for everything except favicon.ico

    HttpConfiguration config = new HttpConfiguration();
    config.setRequestHeaderSize(65535);
    ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(config));
    http.setPort(8080);
    server.setConnectors(new Connector[] {http});

    server.start();
    server.join();
}

我建议您自己进行设置,因为如果您将来有其他配置更改,它会更容易维护。

于 2015-08-06T05:44:58.163 回答