以编程方式设置 Jetty 配置以增加允许的 URL 长度
Programmatically set Jetty configuration to increase allowed URL length
我们在 problem 中使用嵌入式 Jetty 9.3.1.v20150714 和 运行,其中我们的长查询 URL 与其他 headers 相结合,比允许的要长。
solution 看起来很简单:增加 HttpConfiguration
中的 requestHeaderSize
。但我如何轻松做到这一点?我目前正在创建 Server
、ServletContextHandler
和 ServletHolder
。但是要混合自定义 HttpConfiguration
,我是否必须创建新的 ServerConnector
和 HttpConnectionFactory
?我是否必须覆盖 HTTP 和 HTTPS 配置?如何在不重新配置所有默认设置的情况下轻松更改 requestHeaderSize
?
如果您只是设置那个 属性,您可以在默认实例化的 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 连接器,上面的循环也会工作,因为为 HTTPS 配置的 ServerConnector
仍然会有一个关联的 HttpConnectionFactory
。您可以在 this example.
中查看 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();
}
我建议您自己进行设置,因为如果您将来有其他配置更改,维护起来会更容易。
我们在 problem 中使用嵌入式 Jetty 9.3.1.v20150714 和 运行,其中我们的长查询 URL 与其他 headers 相结合,比允许的要长。
solution 看起来很简单:增加 HttpConfiguration
中的 requestHeaderSize
。但我如何轻松做到这一点?我目前正在创建 Server
、ServletContextHandler
和 ServletHolder
。但是要混合自定义 HttpConfiguration
,我是否必须创建新的 ServerConnector
和 HttpConnectionFactory
?我是否必须覆盖 HTTP 和 HTTPS 配置?如何在不重新配置所有默认设置的情况下轻松更改 requestHeaderSize
?
如果您只是设置那个 属性,您可以在默认实例化的 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 连接器,上面的循环也会工作,因为为 HTTPS 配置的 ServerConnector
仍然会有一个关联的 HttpConnectionFactory
。您可以在 this example.
但是,您自己设置必要的对象并没有那么多代码:
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();
}
我建议您自己进行设置,因为如果您将来有其他配置更改,维护起来会更容易。