在我的一个应用程序中,我应该发送一个GET请求,该请求包含应该传递的100多个过滤器字段。将这个GET请求发送到其中一个springboot应用程序时,出现以下错误
java.lang.IllegalStateException:超过最大允许数量 标头为[100]个。 在org.apache.tomcat.util.http.MimeHeaders.createHeader(MimeHeaders.java:260) 〜[tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.tomcat.util.http.MimeHeaders.addValue(MimeHeaders.java:305) 〜[tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.coyote.http11.Http11InputBuffer.parseHeader(Http11InputBuffer.java:790) 〜[tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.coyote.http11.Http11InputBuffer.parseHeaders(Http11InputBuffer.java:565) 〜[tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:703) 〜[tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.23.jar!/:8.5.23] 在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.23.jar!/:8.5.23] 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_152] 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_152] 在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.23.jar!/:8.5.23] 在java.lang.Thread.run(Thread.java:748)[na:1.8.0_152]
在我坚持下去的同时,要求前进的道路。
答案 0 :(得分:0)
这是在您的tomcat容器上配置的。您可以在使用的连接器的 server.xml 中增加maxHeaderCount
。请参阅this以供参考。如果您的标头大小庞大且包含许多标头,则可能还需要考虑增加maxHttpHeaderSize
。
<Connector port="8080" maxHeaderCount="200" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
您使用的嵌入式tomcat,可以通过编程方式完成。
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
return (ConfigurableEmbeddedServletContainer container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory tomcat =
(TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(connector -> {
Http11NioProtocol handler = (Http11NioProtocol) connector.getProtocolHandler();
handler.setMaxHeaderCount(200); // set the number
});
}
};
}
答案 1 :(得分:0)
假设您要在专用的tomcat容器中部署和运行该应用程序(不在docker上或嵌入spring-boot的tomcat。
您可以在server.xml文件中像这样增加。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxHeaderCount="300"/>
有关详情,请参见: https://tomcat.apache.org/tomcat-8.0-doc/config/http.html