url路徑包含中文顯示404錯誤

url路徑包含中文

當url路徑包含中文的時候,瀏覽器會自動採用UTF-8對路徑進行編碼,而服務器(本例中是tomcat,不同服務器的實際可能有差異,但原理差不都)默認是採用ISO-8859-1來對url路徑進行解碼,此時往往會出現404,如以下例子所述。

請求代碼如下

<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>maintitle>
head>
<body>
	上傳成功
<imgalt="xx"src="/fileUpload00/files/TCP三次握手.gif">
body>
html>

響應頁面代碼以及HTTP信息報404:
在這裏插入圖片描述
如截圖所示,當瀏覽器通過url=http://localhost:8080/fileUpload00/fileup請求到一個jsp頁面(上面附有代碼,該頁面包含一個img標籤,標籤的src屬性會再次向服務器發起請求)並進行加載解析,當解析到alt=“xx"src=”/fileUpload00/files/TCP三次握手.gif">的時候,會再次向服務器發起一個get請求,這個get請求正是本例中討論的問題:url路徑中包含中文。瀏覽器默認會將URL進行UTF-8進行編碼:從服務器端的404報錯以及URLEncoder.encode(“三次握手”, “UTF-8”),如下圖所示。
在這裏插入圖片描述

問題總結:(測試環境:chrome瀏覽器,tomcat7,JDK8)

當url路徑包含中文的時候,瀏覽器默認會對其進行UTF-8的編碼,此時發送到服務器端的路徑會被以ISO-8859-1進行解碼,因此服務器會找不到對應中文的路徑資源。

解決方法:

修改tomcat配置文件server.xml,將其默認的ISO-8859-1編解碼修改成UTF-8。改完重啓tomcat服務

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章