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"/>