问题介绍:

背景:由于爆出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=":[]|{}^\`&quot;&lt;&gt;" 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错误

涉及到的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

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

  1. maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class for JSP

    idea 通过maven插件创建一个WEB项目通过内嵌Tomcat加载项目,启动没问题,一访问页面就报错提示无法将jsp编译为class文件: HTTP Status 500 - type Excep ...

  2. webpack高级运用,historyApiFallback(解决history,h5路由,方式刷新页面可能会报错),output中添加publicPath(公共路径)任意找不到的路径都会去访问/等等

    webpack高级应用篇: source-map: 提升开发效率与完善团队开发规范 development环境里配置devtool就可以开启webpackk-source-map(webpack中已经 ...

  3. 普通的Spring Web项目正常启动,在访问某些JSP页面时,页面会报错 http://java.sun.com/jsp/jstl/core

    问题描述:普通的Spring Web项目正常启动,但是在访问某些JSP页面时,页面会报错出现:org.apache.jasper.JasperException: The absolute uri: ...

  4. 兴师动众解决由cookie引发的400报错问题

    背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能.购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息 ...

  5. 【疑难解决】RTSP协议视频流媒体平台EasyNVR调用云台控制接口返回400报错的问题处理

    网络摄像头RTSP协议视频直播平台是TSINGSEE青犀视频全线产品中最先支持ONVIF协议的平台,可以通过ONVIF进行云台控制. 在用户使用EasyNVR调用云台控制的接口时,发现会返回400的报 ...

  6. nginx配置apache服务器均衡负载出现400报错

    nginx配置apache服务器均衡负载出现400报错 个人博客地址:https://www.de009.top/nginx-configures-apache-server-balanced-loa ...

  7. Tomcat 400报错显示tomcat信息的解决

    Tomcat 400报错显示tomcat信息,这就存在着很大的安全隐患. 根据官网给出的方案需要重写ErrorReportValve处理400错误跳转到自定义页面,首先需要更改tomcat中的serv ...

  8. 前台拼接中文参数乱码提交400报错后台无响应

    问题描述:JSP中使用ajax get方式提交表单数据请求,使用英文参数浏览器正常拼接和调用后台接口,输入中文参数拼接乱码,显示400报错,后台打断点无响应. 解决思路:网友提示说将参数使用encod ...

  9. 新部署的nginx访问出现502报错

    记录自己的一次排错,原理后续再补充.在公司使用网络代理上网.自己摸鱼安装部署nginx,自检一切环境正常,依赖正常.但访问出现502报错! 但是使用本机curl和宿主机telnet均出现以下问题: 问 ...

最新文章

  1. iOS学习资源(一)
  2. 15个Google面试题以及答案~~~~你会几个?
  3. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
  4. SkyDrive Explorer 把微软25GB网络硬盘搬进“我的电脑”
  5. difftime C语言,C语言中difftime函数如何使用time_t*
  6. 初级算法——删除排序数组中的重复项
  7. 双目测距(五)--匹配算法对比
  8. 高并发之 API 接口,分布式,防刷限流,如何做?
  9. 京东云魏伟:做最懂视频的云
  10. 用selenium实现百度贴吧自动发帖
  11. 音视频6.2——相机采集数据编码成H264
  12. gitbook踩坑指南-无法转pdf、epub等;pdf调字体大小
  13. 微信和QQ内置浏览器停止访问该网页,微信域名被屏蔽的解决方案
  14. 高校学生快递包装回收行为意愿分析
  15. Spark DAG与RDD
  16. Linux 运维常见英文单词
  17. Typora自动上传图床配置
  18. mysql connectors安装失败_pip install mysql-connector 安装出错
  19. 极限论总极难学真因:人有抵制思想混乱学说本能
  20. 【学术期刊】2023CCF推荐的A,B,C类英文科技期刊目录最新发布

热门文章

  1. ssd linux 分区工具,Linux自动分区工具的示例详细介绍
  2. freeCAD学习笔记一:尝试一个最简单的例子
  3. Python实现打字程序
  4. SQLite管理工具推荐
  5. Python Turtle库画一棵对称勾股树,美丽惊艳的分形世界!
  6. 机械迷城MAC下载及攻略
  7. 元件基础知识——电阻
  8. wifi图传 android,航拍WIFI图传基于芯片设计方案
  9. java-微服务相关面试题
  10. CentOS7环境部署kubenetes1.12版本五部曲之四:安装dashboard