tomcat7.0.70升级为7.0.76后异常 Invalid character found in the request target. 解决

solr5.3部署在tomcat7.0.70上运行正常,升级为7.0.76之后启动正常,访问solr控制台异常:

三月 28, 2017 2:29:42 下午 org.apache.coyote.http11.AbstractHttp11Processor process
信息: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
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.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1000)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

查资料了解到最新的tomcat6 7 8 都有这个问题,这个问题是由于tomcat的新版本增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。

用Fiddler抓包发现请求链接都是400的状态,就是请求参数有误。请求链接中都包含有一个参数名为_值为${version}的参数(http://127.0.0.1:8080/solr/css/styles/common.css?_=${version})。单独请求这个链接同样访问失败,将?_=${version}删除后可正常访问。对照 RFC 3986规范中的定义发现${version}中的一对大括号不在 RFC 3986规范定义的保留字符中。

此时问题已经找到了,就是因为这对大括号引起的错误。这时候的解决方案应是对url中的非法字符进行编码。手动把一对大括号进行编码后链接为:http://127.0.0.1:8080/solr/css/styles/common.css?_=${version} 经测试,该链接可正常访问。接下来要修改源码中的过滤器,对所有请求链接进行UrlEncode编码。
修改源码的时候发现样式和js的请求都在首页html中写死了。格式为:

<link rel="stylesheet" type="text/css" href="css/styles/common.css?_=${version}">

偷个懒只修改了html中的内容,将?_=${version}直接删除,最终格式为:

<link rel="stylesheet" type="text/css" href="css/styles/common.css">

重新部署启动solr,首页访问OK!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Tomcat在处理请求目标时发现了无效字符。有效的字符包括字母、数字和一些特殊符号。一旦请求中包含了无效字符,Tomcat将无法正确解析请求,导致出现错误。 无效字符是指那些不被HTTP协议允许出现在请求目标中的字符。例如,某些特殊符号和非ASCII字符可能被认为是无效字符。其中一个被提到的无效字符是“a”。 如果碰到这个错误,您可以考虑以下解决方案: 1. 检查请求目标中是否存在无效字符。可以使用ASCII字符集中允许的字母、数字和一些特殊符号,如连字符或斜杠。 2. 检查请求目标中是否存在非ASCII字符。如果存在,可以尝试将其转换为相应的ASCII字符或使用URL编码来处理。 3. 检查URL中是否存在空格或其他不允许的字符。如有需要,可以使用URL编码来替换这些字符。 4. 检查请求目标中是否存在其他错误。无效字符错误可能是由其他问题引起的。检查其他相关信息,如请求头和请求体,以寻找可能的错误。 总之,当在Tomcat中遇到“invalid character found in the request target”的错误时,应该仔细检查请求目标中是否包含无效字符,并采取适当的措施来解决该问题。 ### 回答2: Tomcat报错"invalid character found in the request target. the valid characters"意思是在请求目标中发现了无效字符,有效字符包括a。 这个错误通常发生在使用Tomcat服务器时,客户端发起了一个带有无效字符的请求。在URL中,请求目标代表要请求的资源的路径。例如,以GET方法请求http://example.com/my-page时,"my-page"就是请求目标。 Tomcat服务器对请求目标中的字符有一些限制。根据HTTP/1.1规范,请求目标只能包含ASCII字符,并且某些字符需要进行转义。如果在请求目标中发现了无效字符,就会出现这个错误。 在错误信息中提到的有效字符"a"指的是ASCII字符中的字母"a"。根据HTTP/1.1规范,字母"a"是允许在请求目标中使用的有效字符之一。 要解决这个错误,可以检查请求中的URL是否包含了无效字符。确保请求目标只包含ASCII字符,并将其中的无效字符进行转义。可以使用URL编码来确保请求目标中的特殊字符正确转义。 例如,如果请求目标中包含了非ASCII字符,可以使用URL编码将其转换为%xx的格式。对于字母"a",由于它是有效字符,所以不需要进行特殊处理。 总之,当在Tomcat服务器中出现"invalid character found in the request target. the valid characters"的错误时,需要检查请求目标中是否包含了无效字符,并对其进行相应的转义处理,确保请求目标只包含ASCII字符。 ### 回答3: Tomcat invalid character found in the request target问题的原因是在请求目标中存在无效字符。在Tomcat中,请求目标是指HTTP请求中URL中的路径部分。根据HTTP协议,请求目标只能包含特定的有效字符。 有效字符是指被允许在URL中使用的字符,包括字母(大小写),数字以及一些特殊字符,如连字符(-)、下划线(_)、点号(.)等。 然而,为了确保请求的安全性和可靠性,Tomcat对请求目标进行了严格的检查和验证。如果在URL中的请求目标中发现无效字符,Tomcat会拒绝处理该请求,并返回"invalid character found in the request target"错误。 在这种情况下,解决方法是确保请求目标中只包含有效的字符。你提到的有效字符是字母"a",所以可以查看请求目标中是否包含了其他无效字符。 通常情况下,无效字符可能是由URL编码错误引起的。URL编码是一种将特殊字符转换为URL安全字符的方法。对于包含非ASCII字符的URL,应该使用适当的URL编码方法。 另外,如果你使用的是Web应用程序框架,例如Spring MVC,也可能是在生成URL时出现了编码问题。在此情况下,建议检查URL生成的代码,确保使用了正确的URL编码机制。 总之,要解决Tomcat invalid character found in the request target问题,需要检查并确保请求目标中只包含有效字符,并正确处理URL编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值