http請求:javascript
瀏覽器 --》服務器(tomcat應用服務器)---》應用前端
1,瀏覽器。java
url:瀏覽器默認採用UTF-8,對URL參數中非ASCII進行百分號編碼(RFC3986「%編碼」進行編碼);ajax
表單(get/post)請求:採用當前頁面編碼,對URL參數中的非ASCII字符進行百分號編碼;chrome
ajax: get方式發起的請求,IE11和chrome會根據當前頁面的默認編碼對URL參數中的非ASCII字符進行百分號編碼。而IE6不會對URL非ASCII表示的路徑信息和參數信息進行編碼。json
post方式發起的請求,即使設定了application/x-www-form-urlencoded頭信息,瀏覽器也不會對數據作任何的編碼(或者說瀏覽器不把發送的數據當作URL的一部分)。瀏覽器
採用encodeURIComponent()或者encodeURI()對非ASCII字符進行編碼。encodeURIComponent與encodeURI區別:tomcat
1,encodeURI方法不會對下列字符編碼 ASCII字母、數字、~!@#$&*()=:/,;?+'服務器
Tomcat會使用默認字符編碼「ISO-8859-1」對URL參數進行解碼。能夠經過server.xml文件修改字符集編碼:app
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
3,應用
能夠經過使用java.net.URLDecoder與java.net.URLEncoder、或者指定字符集編碼從新構造String對象。
一種保守的處理方法:對URL參數進行Base64編碼、解碼。
前端
$.ajax({
url: "${ctx}/****?key="+encodeURIComponent(new Base64().encode(id)),
type: 'GET',
dataType: 'json'
}).done(function (data) {
if (data.success) {
$this.attr("href",data.code);
}
});
後臺
key = new String(Base64.decodeBase64(key));