大家好,又见面了,我是你们的朋友全栈君。
背景:由于爆出Tomcat低版本内容中,存在Web Socket漏洞。因此安排Tomcat升级,本次升级到是Tomcat7.0.106。
问题:升级Tomcat服务器后,原有的所有含有中文链接在IE浏览器请求均报错HTTP-400,在谷歌chrome、360极速浏览器(极速模式)下均可正常访问。
十一月 23, 2020 10:41:46 上午 org.apache.coyote.http11.AbstractHttp11Processor process
信息: 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。
java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:213)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1108)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
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)
在参照网上调整Tomcat的server.xml,在Connector中加入
relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%"
后并没有用,原本的连接设置也是支持UTF-8的,修改后配置:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="1000" enableLookups="false" acceptCount="1000"
connectionTimeout="30000" redirectPort="8444"
disableUploadTimeout="true" URIEncoding="UTF-8" relaxedPathChars="|{}[],%:" relaxedQueryChars=":[]|{}^\`"<>" useBodyEncodingForURI="true"/>
还是没有办法解决IE的访问出错。
1、调整IE的设置:Internet选项-高级-按图中勾选即可。(临时解决方案,所有用户都得改,改完还要重启….)
2、添加编码和解码(推荐解决方案,建议大家写代码还是参考规范,不要有中文类型的链接)
1.js编码encodeURI(encodeURI(URL)),编码两次 2.服务器端解码 URLDecoder.decode(request.getParameter(“para”),”UTF-8″)
3、降低Tomcat版本(治标不治本,而且本次就是为了修复安全漏洞对tomcat进行升级)
IE6-IE11(Edge 不存在,可能修改了编码方案) 中文会被IE使用iso-8859-1编码 编码后的中文字符串带反斜杠,这是RFC文档中规定的不安全字符,Tomcat在高版本中增加的安全验证,凡是RFC 3986中非URL可携带的字符,都会返回400错误
参考链接:
1、https://www.cnblogs.com/mrmoo/p/9637924.html
2、https://blog.csdn.net/guanfengliang1988/article/details/73321358/
3、http://blog.sina.com.cn/s/blog_711ab1b10102x0v4.html
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136713.html原文链接:https://javaforall.cn