gpt4 book ai didi

java - Tomcat - 进一步发生的 HTTP header 解析错误将在 DEBUG 级别记录

转载 作者:行者123 更新时间:2023-12-04 14:00:33 28 4
gpt4 key购买 nike

我创建了一个 SpringBoot 应用程序。当我使用大 header 大小发出 HTTP Post 请求时,出现以下错误:

2018-03-09 14:53:01,190 INFO  [http-nio-8080-exec-1] logging.DirectJDKLog (DirectJDKLog.java:182) - Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:706) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11InputBuffer.parseHeader(Http11InputBuffer.java:853) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11InputBuffer.parseHeaders(Http11InputBuffer.java:565) ~[tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:703) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_101]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]

请注意,进一步发生的 HTTP header 解析错误将在 DEBUG 级别记录(如错误说明中所述)。我想解决这个问题,以便所有发生的此类错误都记录在 INFO 级别本身。

因此,我在 application.properties 文件(位于 src/main/resources/config/)中添加了这两行:
org.apache.juli.logging.UserDataHelper.CONFIG = INFO_ALL
org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME = 0
# server.maxHttpHeaderSize=10000000

但这不起作用(并且仅在 INFO 级别记录第一次出现的错误)。

请注意,设置 maxHttpHeaderSize=10000000 工作正常,并且它使大标题问题完全消失。

但我在这里想要的是 - 所有此类错误都记录在 INFO 级别本身。

任何帮助将不胜感激 :)

附加信息:SpringBoot 版本:1.5.10.RELEASE,
Tomcat 版本:8.5.27

最佳答案

这两个属性必须设置为 Java 系统属性。在 Spring Boot 中没有无代码的方式来设置它们(参见 this question ),所以在这种情况下,我会将它们设置在 EmbeddedServletContainerCustomizer 中。对于 Spring Boot 1.x:

@Component
public class UserDataHelperCustomizer implements EmbeddedServletContainerCustomizer {

@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.setProperty("org.apache.juli.logging.UserDataHelper.CONFIG", "INFO_ALL");
}

}
和类似的 WebServerFactoryCustomizer对于 Spring Boot 2.x:
@Component
public class UserDataHelperCustomizer implements WebServerFactoryCustomizer<WebServerFactory> {

@Override
public void customize(WebServerFactory factory) {
System.setProperty("org.apache.juli.logging.UserDataHelper.CONFIG", "INFO_ALL");
}
}
备注: SUPPRESSION_TIME=0CONFIG=INFO_ALL是等价的,所以只需要设置一个。

关于java - Tomcat - 进一步发生的 HTTP header 解析错误将在 DEBUG 级别记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49190811/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com