IE访问页面400报错,其他浏览器可正常访问

IE访问页面400报错,其他浏览器可正常访问问题介绍:背景:由于爆出Tomcat低版本内容中,存在WebSocket漏洞。因此安排Tomcat升级,本次升级到是Tomcat7.0.106。问题:升级Tomcat服务器后,原有的所有含有中文链接在IE浏览器请求均报错HTTP-400,在谷歌chrome、360极速浏览器(极速模式)下均可正常访问。报错日志:十一月23,202010:41:46上午org.apache.coyote.http11.AbstractHttp11Proce…

大家好,又见面了,我是你们的朋友全栈君。

问题介绍:

背景:由于爆出Tomcat低版本内容中,存在Web Socket漏洞。因此安排Tomcat升级,本次升级到是Tomcat7.0.106。

问题:升级Tomcat服务器后,原有的所有含有中文链接在IE浏览器请求均报错HTTP-400,在谷歌chrome、360极速浏览器(极速模式)下均可正常访问。

                   IE访问页面400报错,其他浏览器可正常访问

报错日志:

十一月 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=":[]|{}^&#x5c;&#x60;&quot;&lt;&gt;" useBodyEncodingForURI="true"/>

还是没有办法解决IE的访问出错。

解决办法:

1、调整IE的设置:Internet选项-高级-按图中勾选即可。(临时解决方案,所有用户都得改,改完还要重启….)

IE访问页面400报错,其他浏览器可正常访问

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错误

涉及到的TOMCAT版本

  • 7.0.69+
  • 8.0.39+
  • 8.5.7

附 RFC 3986文档关于特殊字符的定义

  • RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、(-_.~)4个特殊字符以及所有保留字符。

  • RFC3986中指定了以下字符为保留字符:
    ! * ‘ ( ) ; : @ & = + $ , / ? # [ ]

  • 以下为不安全字符

  • 空格 Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉

  • 引号以及<> 引号和尖括号通常用于在普通文本中起到分隔Url的作用

  • 通常用于表示书签或者锚点

  • % 百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码

  • {}|^[]`~ 某一些网关或者传输代理会篡改这些字符

 

参考链接:

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.net/136713.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BAT机器学习面试1000题系列(第1~305题)

    BAT机器学习面试1000题系列整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接。另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校。说明:本系列作为国内首个AI题库,首发于七月在线实验室公众号上:julyedulab,并部分更新…

    2022年4月6日
    31
  • 木马免杀原理

    木马免杀原理##木马免杀原理###一、实验目的1.了解杀毒软件特征码查杀病毒的基本原理2.掌握木马特征码免杀的原理和方法###二、实验环境1.系统环境:Windows环境,XP环境2.软件工具:灰鸽

    2022年7月4日
    25
  • STL库基础学习

    STL库基础学习目录1.什么是STL库2.几种常见的STL模板(1)vector1.vector向量模板2.vector迭代器3.常见方法与用法(2)list(3)queue和stack(4)set和map3.几种STL的时间复杂度比较1.什么是STL库◦STL又称为标准模板库,是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。◦也就是说,有了STL,数据结…

    2022年10月15日
    3
  • Linux 下MySQL备份[通俗易懂]

    Linux 下MySQL备份[通俗易懂]Linux下MySQL数据库备份和恢复Linux下MySQL数据库有逻辑备份和物理备份,也可以分为完全备份、部分备份。·完全备份是指备份整个数据集(即整个数据库)·部分备份是指备份部分数据集(只备份一个表)逻辑备份最大优点是对于各种存储引擎,都可以使用同样的方法来备份。而物理备份则不同,不同的存储引擎有着不同的备份方法。mysqldump基本语法mysqldump-uUs…

    2022年6月16日
    34
  • Win7系统解决无法打开任务管理器「建议收藏」

    Win7系统解决无法打开任务管理器「建议收藏」Win7系统解决无法打开任务管理器有时候在使用Win7系统过程中会出现无法打开任务管理器的情况,以下内容给出几种常见的打开任务管理器的方式以及无法启动任务管理器时的简单解决方案。Win7系统解决无法打开任务管理器常用打开任务管理器的方式一、快捷键方式二、命令行方式解决方案常用打开任务管理器的方式一、快捷键方式Ctrl+Alt+DelCtrl…

    2022年6月22日
    28
  • Rsyslogd 配置[通俗易懂]

    Rsyslogd 配置[通俗易懂]Rsyslogd配置一般的,Rsyslogd的配置文件在/etc/rsyslog.conf。配置文件格式有3种格式的配置文件basic基础配置格式,兼容syslog.conf格式advanced以前叫RainerScript格式,在rsyslogv6开始使用obsoletelegacy传统的格式,仅为确保旧有配置不会出错需要用哪种格式强烈建议不要使用传统格式,应在基…

    2022年8月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号