【问题标题】:IllegalArgumentException without any http reuest [closed]没有任何 http 请求的 IllegalArgumentException [关闭]
【发布时间】:2020-05-08 08:57:13
【问题描述】:

在启动tomcat 8.5.47 version 几分钟后,在catalina.log 中看到以下错误。

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:490)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:682)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)

注意:浏览了互联网上提供的许多解决方案,但都提到了导致问题的显式 http 请求,但在我的情况下,问题是在没有任何显式 http 请求的情况下启动服务器后发生的。

【问题讨论】:

  • 你使用的uri是什么?
  • @pradosh nair 未使用 uri。刚用我的应用程序启动服务器,几分钟后出现错误。我正在使用 java.net.InetAddress 来获取 localhostName() 。怀疑它是否在内部进行了 http 调用,这会导致问题。但不确定。

标签: java http tomcat https tomcat8


【解决方案1】:

必须与您的服务器通信才能实现这一点,但不管它是什么,它似乎都不是符合标准的 HTTP 客户端。

我的建议是使用 Wireshark 或类似的东西来尝试捕获服务器正在接收的触发消息的数据包。弄清楚数据包中的内容以及它们的来源。

一旦您获得有关此流量是什么以及来自何处的一些信息,您就离解决方案更近了一步。

【讨论】:

  • 我在收到错误期间检查了所有传入请求的 localhost-access 日志,还尝试手动触发类似请求但无法重现问题。
  • 如果有格式错误的请求,可能不会记录在访问日志中。这就是我建议使用数据包记录器的原因。
  • 感谢您的建议确实有帮助,并使用 localhost-access 日志找出发出请求的确切 uri。从中找到源 IP 地址,在执行 nslookup 后得到主机名并能够找出罪魁祸首。非常感谢斯蒂芬。
【解决方案2】:

如您所见,错误发生在parseRequestLine 方法中。有人(希望是您)正在向您的服务器发送无效的 HTTP 请求。

一般来说,连接客户端向您发送胡扯请求应该被忽略并且不记录,或者至少,如果您要记录其中的任何一个,肯定不是堆栈跟踪,它没有完成太多;您想要记录 IP 以及有关他们发送的请求性质的一些详细信息。

我不确定您是否捕捉到此异常并打印此异常,或者 catalina 是否捕捉到此异常,但无论哪种方式,都应该忽略此日志。

【讨论】:

  • 感谢@rzwitserloot 的回复。但是没有使用uri。刚用我的应用程序启动服务器,几分钟后出现错误。我正在使用 java.net.InetAddress 来获取 localhostName() 。怀疑它是否在内部进行了 http 调用,这会导致问题。但不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多