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));