zoukankan      html  css  js  c++  java
  • Tomcat中出现"RFC 7230 and RFC 3986"错误的解决方法

      在用axios从前台向后台发请求时,后台报错

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    

      查了一下,是因为高版本tomcat中的新特性:严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了URL中只允许

    • 包含英文字母(a-z,A-Z)
    • 数字(0-9)
    • -_.~4个特殊字符

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

      而本例在传参时,在参数中传了一段JSON,传入的参数中有”{“,且有中文字符,均不在RFC3986中的保留字段中,所以会报这个错。

    解决方法:

    1、配置tomcat的catalina.properties

      添加或者修改:

      tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

       这种方法只适合对应的英文,如果含中文则就不行。如果有?和&这些符合那么

      tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}?&

    2、更换Tomcat版本,但是不建议,既然有这个规范就养成习惯去遵守。

    3、对相应参数编码后传输到后台再进行解码

    JS端,使用encodeURI()方法:

    param: encodeURI(something)

    Java端,使用URLDecoder.decode()方法解码:

        String temp = req.getParameter("param");
        temp = URLDecoder.decode(temp, "utf-8"); 

       如果你需要在服务器端加密,可用URLDecoder.encode(),与URLDecoder.decode()作用相反不再赘述。需要注意的是这两个java方法有两个参数,第二个参数是加密方法。不指定加密方式的写法已被废弃。

  • 相关阅读:
    Asp.net MVC3
    ASP.NET 路由实现页面静态化(附在线Demo和Source)
    ASP.NET MVC中Unobtrusive Ajax的妙用
    ASP.NET MVC Controller激活系统详解:IoC的应用[上篇]
    探讨大数据量处理
    提高ASP.NET性能与可伸缩性的几个个常用方法剖析
    Winform 应用
    C#利用QrCode.Net生成二维码
    MS SQL删除大数据
    由浅入深:自己动手开发模板引擎——置换型模板引擎1
  • 原文地址:https://www.cnblogs.com/showjs/p/11413655.html
Copyright © 2011-2022 走看看