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方法有兩個參數,第二個參數是加密方法。不指定加密方式的寫法已被廢棄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM