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的作用
    • 通常用於表示書簽或者錨點

    • % 百分號本身用作對不安全字符進行編碼時使用的特殊字符,因此本身需要編碼
    • {}|^[]`~ 某一些網關或者傳輸代理會篡改這些字符


免責聲明!

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



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