Http请求url参数字符集
http請(qǐng)求:
瀏覽器 --》服務(wù)器(tomcat應(yīng)用服務(wù)器)---》應(yīng)用
1,瀏覽器。
url:瀏覽器默認(rèn)采用UTF-8,對(duì)URL參數(shù)中非ASCII進(jìn)行百分號(hào)編碼(RFC3986“%編碼”進(jìn)行編碼);
表單(get/post)請(qǐng)求:采用當(dāng)前頁面編碼,對(duì)URL參數(shù)中的非ASCII字符進(jìn)行百分號(hào)編碼;
ajax:??get方式發(fā)起的請(qǐng)求,IE11和chrome會(huì)根據(jù)當(dāng)前頁面的默認(rèn)編碼對(duì)URL參數(shù)中的非ASCII字符進(jìn)行百分號(hào)編碼。而IE6不會(huì)對(duì)URL非ASCII表示的路徑信息和參數(shù)信息進(jìn)行編碼。
? post方式發(fā)起的請(qǐng)求,即便設(shè)定了application/x-www-form-urlencoded頭信息,瀏覽器也不會(huì)對(duì)數(shù)據(jù)做任何的編碼(或者說瀏覽器不把發(fā)送的數(shù)據(jù)當(dāng)做URL的一部分)。
采用encodeURIComponent()或者encodeURI()對(duì)非ASCII字符進(jìn)行編碼。encodeURIComponent與encodeURI區(qū)別:
1,encodeURI方法不會(huì)對(duì)下列字符編碼??ASCII字母、數(shù)字、~!@#$&*()=:/,;?+'
2,encodeURIComponent方法不會(huì)對(duì)下列字符編碼?ASCII字母、數(shù)字、~!*() 另外還可以使用escape()對(duì)字符串進(jìn)行編碼。 2,Tomcat服務(wù)器。? ?Tomcat會(huì)使用默認(rèn)字符編碼“ISO-8859-1”對(duì)URL參數(shù)進(jìn)行解碼。可以通過server.xml文件修改字符集編碼:
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
3,應(yīng)用
可以通過使用java.net.URLDecoder與java.net.URLEncoder、或者指定字符集編碼重新構(gòu)造String對(duì)象。
?
一種保守的處理方法:對(duì)URL參數(shù)進(jìn)行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);}});?后臺(tái)
key = new String(Base64.decodeBase64(key));
轉(zhuǎn)載于:https://www.cnblogs.com/hf-china/p/9040899.html
總結(jié)
以上是生活随笔為你收集整理的Http请求url参数字符集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac003--Maven安装与环境变量
- 下一篇: Codeforces Round #48