Tomcat 7.0.81 URL参数包含大括号{}报错的解决办法
来源:互联网 发布:php防止xss 编辑:程序博客网 时间:2024/06/08 13:11
今天在Tomcat 7.0.81进行测试时,发现一个BUG,前台通过ajax访问后台controller时,无法进行页面跳转。Tomcat控制台报错,错误信息如下:
信息: 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.InternalAprInputBuffer.parseRequestLine(InternalAprInputBuffer.java:235)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2549)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2538)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:662)
经过分析,发现问题是由URL中一个参数params引起的,
这个参数通过JSON2.stringify()转换为一个对象数组,所以包含了{},而恰恰就是这一步在Tomcat 7.0.81版本中出现 了问题,请求链接都是400的状态,就是请求参数有误。
这个问题是由于Tomcat的新版本中增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
既然分析出了原因,那么就要找解决方案了,其实,解决办法很简单,就是使用encodeURIComponent或encodeURI对包含{}的URL进行编码,这样就可以解决该问题。当然,还有一种办法就是更换Tomcat为支持大括号{}的版本。
- Tomcat 7.0.81 URL参数包含大括号{}报错的解决办法
- tomcat 7 7.0.73 url 参数 大括号 {} 不支持,7.0.67 支持
- iOS开发-url包含中文报错解决办法
- flash 图片切换 flashvar 中 links 参数url中包含 & 的解决办法
- 拿到url中包含的参数 - iOS
- String.Format 源字符串包含大括号的小问题
- String.Format 源字符串包含大括号的小问题
- Junit 文件URL报错解决办法
- myeclipse中tomcat异常报错的解决办法
- Eclipse中Tomcat频繁报错的解决办法
- URL带多个参数&无法解析的解决办法!+
- C# URL带中文参数的解决办法
- HttpURLConnection的URL包含中文字符时乱码的解决办法
- url中包含#字符等特殊字符导致请求报错的解决方案
- EndNote导入文献出现带有大括号{}乱码的解决办法
- tomcat解析url参数的解析方式
- Tomcat7 iframe URL中包含中文乱码的解决办法
- MyEclipse使用Tomcat,报OutOfMemoryError的解决办法
- caffe源码阅读
- 计算机网络第二次作业
- 一个高效的征选择算法-文本分类
- Java多线程编程学习chapter2
- dispatchTouchEvent总结
- Tomcat 7.0.81 URL参数包含大括号{}报错的解决办法
- pt-query-digest使用详解
- Android前端RxJava2+Retrofit2;后端SpringMvc实现图片上传
- 高级C语言教程-sscanf()函数使用方式
- Python3 解释器
- Java四种访问修饰符的区别
- 纯CSS实现背景图片切换(CSS3伪类实现背景图片切换)
- 欢迎使用CSDN-markdown编辑器
- 完成了一个网上商城项目后的感受