1. 程式人生 > >Tomcat 報 The valid characters are defined in RFC 7230 and RFC 3986

Tomcat 報 The valid characters are defined in RFC 7230 and RFC 3986

首先把問題掛上

最近換了一個新的Tomcat ,版本是Tomcat8,編寫了一個專案之後,發現這個tomcat無法傳遞JSON資料,這讓我很鬱悶呀,各種給google各種百度,最後無濟於事,就想,會是工具的問題嗎?我用IDEA開發的,各種檢檢視看是不是自己配置錯了,最後沒有查出問題,繼續往下,會是Tomcat問題嗎?我是從官方文件下載的呀,我就重新下載了一份,又下載了一份版本相對低一點的,最後配置好跑起來,結果也是不行,那是ubuntu開發的問題嗎,之後開啟window系統,使用eclipse開發了一份,然後在window下跑起來確認無誤的跑起來,拿到編譯檔案複製到ubuntu下,跑起來不可以,那確定肯定不是工具的問題,緊接著我把這份編譯後的檔案放到伺服器上,伺服器也是ubuntu系統的,跑起來沒問題,難道是ubuntu16和之前的版本http協議不同,Google,baidu,,,,最後也沒發現問題,最後排除所有可能性,最後又回到tomcat上,我把伺服器的tomcat複製一份到到本地系統,問題解決,這又可能是最近官方tomcat更新出問題了。

對於這個問題,更準確的說實際上不是tomcat出了問題,而是tomcat9.0相對於tomcat 8.0對URL做出了一些更嚴格的限制RFC3986文件規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字元以及所有保留字元。 解決辦法的話,簡單點的就是複製一份之前能用的tomcat到你的本地,但是顯然不是長久之計,既然tomcat9.0已經對URL做出了限制,所以即使是練習,之後的url的中文和一些不符合的符號都先在客戶端進行URLEncode編碼,再將URL拼接成一個整體後再發送出去。最後服務端在進行解碼。

  示例: