Java 如何解决;在HTTP协议[HTTP/1.10x0aHost:]中找到无效字符;?
在我将SpringBoot项目部署到AWS EC2实例后,经常出现异常:Java 如何解决;在HTTP协议[HTTP/1.10x0aHost:]中找到无效字符;?,java,html,spring-boot,tomcat,Java,Html,Spring Boot,Tomcat,在我将SpringBoot项目部署到AWS EC2实例后,经常出现异常: 2020-07-31 01:56:21.487 DEBUG 7340 --- [nio-8080-exec-1] o.a.tomcat.util.net.SocketWrapperBase : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@3d89313d:org.apache.tomcat.util.net.NioChannel@1
2020-07-31 01:56:21.487 DEBUG 7340 --- [nio-8080-exec-1] o.a.tomcat.util.net.SocketWrapperBase : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@3d89313d:org.apache.tomcat.util.net.NioChannel@11d95ea0:java.nio.channels.SocketChannel[connected local=/172.31.38.151:8080 remote=/198.98.61.139:33842]], Read from buffer: [0]
2020-07-31 01:56:21.487 DEBUG 7340 --- [nio-8080-exec-1] org.apache.tomcat.util.net.NioEndpoint : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@3d89313d:org.apache.tomcat.util.net.NioChannel@11d95ea0:java.nio.channels.SocketChannel[connected local=/172.31.38.151:8080 remote=/198.98.61.139:33842]], Read direct from socket: [175]
2020-07-31 01:56:21.487 INFO 28770 --- [nio-8080-exec-4] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the HTTP protocol [HTTP/1.10x0aHost:]
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:560) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
它不会破坏项目,而且每个功能都运行良好。
但是我不知道它是否会在将来引起一些问题,所以我想现在就解决它
有谁能给我一些提示,说明是什么导致了这个异常吗?我也遇到了同样的问题,发现它与8.5.44版中引入的Tomcat 8.5的更改有关。关于这一点的描述是
Fix:63578:改进对无效请求的处理,以便将400个响应返回给客户端,而不是500个响应。(标记)
()
在这种情况下,一些向HTTP GET端点发出手动请求的遗留代码会发送如下内容:
“GET”+path+“HTTP/1.1\n”
这需要更改为:
“GET”+path+“HTTP/1.1\r\n”
修复此问题
将详细信息放在此处,以便将来参考其他具有相同问题的人。Tomcat本可以修复此问题,使其更加兼容,这可能会破坏做得不正确的遗留代码。
0x0a
是一个换行符,如果这样有帮助的话。您是否正在向apache发送SSL流量,并且apache没有配置私有SSL证书来解密它?@ArunK实际上,我不太明白你说的话,因为我年纪很小。这个项目是一个用于发送电子邮件的restful api。当api收到请求时,不会发生异常。相反,它发生在没有“手动”发送请求时。我在代码中又添加了两行。希望这有助于解释这个问题。所以,为了回答您的问题,我不知道我发送的请求是否是SSL流量,但即使是SSL流量,也不会导致异常。这个项目现在在EC2上,是否可以公开访问?您是否经常收到此错误日志条目,但一切正常?如果两者都是真的,那么你是否可能只是从四处窥探的人那里得到了疑问?我有时在我的网络服务器上得到这些。他们会发送错误请求,试图查找系统中的漏洞,这会在我的日志中触发错误。你能将这些错误追溯到触发错误请求的IP吗?@DavidTran我刚刚检查了有问题请求的发送者的IP地址,但不是我。前两行代码显示IP。我认为你是对的,这个例外是由四处窥探的人的询问引起的。非常感谢。