關於HTTP GET請求的url中文引數編碼

2021-08-19 18:37:03 字數 1321 閱讀 5353

場景:前端用js構造了乙個get請求,攜帶了乙個中文的引數,通過spring mvc傳到後台以後解析中文是亂碼。

1. 傳送請求,從瀏覽器中捕獲到http的請求內容如下:

4 status code:201 created

1 //將utf-8格式的中文轉換成url編碼

2 encodestr = urlencoder.encode(fname, "utf-8");

3 //將url編碼的字串轉換成utf-8格式的中文

4 decodefname = urldecoder.decode(encodestr, "utf-8");

測試結果,沒有達到預期,再仔細看看,笑了,上面不是做了一次a->b->a的無效轉碼嗎?!

3.亂碼是怎麼回事呢?

我的頁面設定的utf-8格式,我的spring mvc框架的編碼filter也配置了utf-8,現在的亂碼是怎麼回事呢?

4. 原因找到了:

spring mvc 是基於servlet,在http請求到達servlet解析之前,get過來的url已經被tomcat先做了一次urldecode。

tomcat對get方式預設的url解碼結果是iso-8859-1而不是utf-8!

5. 解決辦法:

decodefname = new string(fname.getbytes("iso-8859-1"),"utf-8");
由於上述原因,在構造http響應訊息時,需要把中文字元再轉成iso-8859-1。

6.還有一種辦法,就是配置tomcat:

在tomcat的conf目錄下的server.xml中配置connector的urieconding=「utf-8"屬性即可,沒有這個引數可以手動加上。

或者是其他伺服器的connector也可以

還有配置專案的***

vanclshare

org.springframework.web.servlet.dispatcherservlet

contextconfiglocation

classpath:vanclshare-servlet.xml

1 *.html

/index

index

關於HTTP GET請求的url中文引數編碼

場景 前端用js構造了乙個get請求,攜帶了乙個中文的引數,通過spring mvc傳到後台以後解析中文是亂碼。1.傳送請求,從瀏覽器中捕獲到http的請求內容如下 4 status code 201 created1 將utf 8格式的中文轉換成url編碼 2 encodestr urlencod...

HTTP GET請求URL中IP被異常替換的問題

現在有乙個web遊戲登入介面,大致就是傳遞使用者名稱 伺服器id 使用者ip 登入時間完成遊戲登入資訊生成的功能。鏈結大約是這樣的 為了防止偽造請求,這些引數都需要進行簽名。簽名方式大致是把這些引數拼接起來再加乙個key進行md5運算。只要任何乙個引數被修改,md5值都會發生改變,簽名檢查就無法通過...

各瀏覽器HTTP Get請求URL的最大長度

各瀏覽器http get請求url最大長度並不相同,幾類常用瀏覽器最大長度及超過最大長度後提交情況如下 ie6.0 url最大長度2083個字元,超過最大長度後無法提交。ie7.0 url最大長度2083個字元,超過最大長度後仍然能提交,但是只能傳過去2083個字元。firefox 3.0.3 ur...