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中的配置来解决此问题?
答案 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: ['{','}']