Http請求url參數字符集

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字母、數字、~!@#$&*()=:/,;?+'服務器

        2,encodeURIComponent方法 不會對下列字符編碼 ASCII字母、數字、~!*()
  另外還可使用escape()對字符串進行編碼。
2,Tomcat服務器。

    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));
相關文章
相關標籤/搜索