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

时间:2018-02-07 03:01:44

标签: tomcat

java.lang.IllegalArgumentException: 
Invalid character found in the request target. 
The valid characters are defined in RFC 7230 and RFC 3986

此异常是由在Get URL中传递中文单词引起的。如何在tomcat中解决此问题?

我们不想减少Tomcat版本并要求我们的客户对参数进行编码。

有没有办法通过更改tomcat中的配置来解决此问题?

4 个答案:

答案 0 :(得分:3)

无法在Tomcat中修复此问题。请求不符合规范,因此Tomcat不允许这些请求。围绕系统中不同组件对这些URL做出不同反应的安全问题有很长的历史。通常以标题和/或请求注入的形式。结果,Tomcat的URL解析已经收紧,并且它不太可能放松。

由于同样的原因,httpd正朝着同一个方向前进。

最好的长期选择是向客户指出他们发送的请求不符合规范,并且需要修复它们(通过使用适当的%nn编码)。在Tomcat端,确保Tomcat使用UTF-8。这是较新版本的默认设置。您可能需要在旧版本中明确设置它。

答案 1 :(得分:2)

看起来像开箱即用的Tomcat不会允许这些字符,正如您所见,瞥一眼this question似乎意味着您可以更改此行为来编辑您的catalina.properties和定义requestTargetAllow参数,如下所示:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

不幸的是,看起来这只是你想要允许的一长串字符,所以如果你想要所有的中文字符,那么每个Wikpedia都会有一个很长的列表:

  

在中国,使用简体中文字符,XiàndàiHànyǔ   ChángyòngZìbiǎo(现代汉语常用字表,现代汉语常见字符表)   中文)列出了2,500个常见字符和1,000个不常见字符   字符,而XiàndàiHànyǔTōngyòngZìbiǎo(现代汉语通用字表,图表   现代汉语的一般利用特征)列出7,000   字符,包括上面已列出的3,500个字符。

答案 2 :(得分:0)

在AJAX GET请求中发送文件位置时遇到相同的错误。

错误:

java.lang.IllegalArgumentException: 
Invalid character found in the request target. 
The valid characters are defined in RFC 7230 and RFC 3986

由于该位置包含无法识别的字符。即“ C:///”等,引发了错误。

使用encodeURIComponent可以解决此问题,因为它可以对组件进行编码。

传递中文字符时,请确保将其添加到“ encodeURIComponent”方法中。就我而言:

 $.ajax({
        type: "GET",
        url: 'removeFile?removeFileName=' + encodeURIComponent("C:///YO/Ed/PO/")
        data: {},
        dataType: 'json',

答案 3 :(得分:-1)

较新版本的 tomcat 将不允许某些特殊字符。如果您使用的是 Spring Boot,您可以通过 tomcat 传递一个属性来允许您的特殊字符。

 server:
  tomcat:
    relaxed-query-chars: ['{','}']