zoukankan      html  css  js  c++  java
  • ie浏览器 GET请求带中文请求,tomcat返回400

    Tomcat出现版本

    • 7.0.69+
    • 8.0.39+
    • 8.5.7+

    原因

    • IE6-IE11(Edge 不存在,可能修改了编码方案) 中文会被IE使用iso-8859-1编码 编码后的中文字符串带反斜杠,这是RFC文档中规定的不安全字符,Tomcat在高版本中增加的安全验证,凡是RFC 3986中非URL可携带的字符,都会返回400错误

    解决方案

    • 前端对中文URLEncoding后在发送请求,后端要么修改tomcat源码要么降低tomcat版本,否则无法解决这个bug,查阅资料后并没有找到可以更改IE默认编码的方法,后端在tomcat的server.xml中增加urlencoding配置也无法解决这个问题,因为这个问题根本都还没有进入到业务层就已经被拦截返回了。所以,综上,前端转码是最好的方案,因为Url参数中带中文本来就是不符合规范的。

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

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

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

    • 以下为不安全字符

      • 空格 Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉
      • 引号以及<> 引号和尖括号通常用于在普通文本中起到分隔Url的作用
      • 通常用于表示书签或者锚点

      • % 百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
      • {}|^[]`~ 某一些网关或者传输代理会篡改这些字符
  • 相关阅读:
    yum和apt-get用法及区别
    Vim终极指南:所思即所得
    Vim 操作符命令和动作命令
    vim中文手册
    标准代码页(codepage)列表
    中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
    vim在系统剪切板的复制与粘贴
    linux中高亮显示文本的工具 -- bat
    pandas category数据类型
    pandas 数据类型转换
  • 原文地址:https://www.cnblogs.com/mrmoo/p/9637924.html
Copyright © 2011-2022 走看看