Tomcat.8.5.15不接受" \"在URI中并抛出IllegalArgumentException

时间:2017-08-29 07:38:58

标签: tomcat uri

  • 当我使用" \"作为URI中的路径分隔符,我在tomcat 8.5.15中收到了一个非法的例子.Below是错误信息: -

    org.apache.coyote.http11.Http11Processor.service解析HTTP请求标头时出错 注意:将在DEBUG级别记录更多出现的HTTP头解析错误。 java.lang.IllegalArgumentException:在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 在org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472) 在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683) 在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:861) 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1455) 在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) 在java.lang.Thread.run(未知来源)

  • 绕过此问题我试图添加  org.apache.catalina.connector。 CoyoteAdapter.ALLOW_BACKSLASH =真 在catalina.properties中,我仍然无法重新解决这个问题。

4 个答案:

答案 0 :(得分:1)

要解决此问题,您可以设置requestTargetAllow选项。只需取消注释文件中的最后一行即可。

$CATALINA_HOME/conf/catalina.properties

答案 1 :(得分:0)

\用于许多编程语言中的转义序列,包括Java。

替换所有" \"要加倍反斜杠,你可以使用" /"。

答案 2 :(得分:0)

当我在URI中使用“ \”作为路径分隔符时,我在tomcat 8.5.15中得到了非法参数异常。以下是错误消息:

让我们看看错误消息

在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

无需浏览这些RFC并尝试确定每个细节中有效字符的细节,例如:您希望我们解释错误消息的哪一部分?

仅在at the definition中仅 的URI中提到“ /”作为路径分隔符。而且,不,我什至不声称要链接到该RFC的相关部分:仅凭错误消息,我就认为恢复使用“ \”作为路径分隔符可能比解决所有将来的问题更简单。 。

如果您现在设法说服Tomcat接受非标准字符,则将来的反向代理或高速缓存代理或其他中游组件可能不会接受,并且您将生成大量即将进行的维护。从根本上更改它,然后立即停止执行操作。

如果您已将ALLOW_BACKSLASH设置复制/粘贴到问题中,则它包含一个多余的空间:如果该空间确实在您的配置中,则您尚未配置要配置的内容。我仍然会强烈建议将其修复到该级别。

答案 3 :(得分:-2)

我建议您将 Tomcat版本降级为8.5.6