Get和Post請求詳解
1.請求長度
RFC對於Get和Post請求並沒有長度的限制。
但是瀏覽器有限制,比如IE瀏覽器Get請求不能超過2083個字元,而火狐瀏覽器不能超過65536個字元。瀏覽器對於Post請求則沒有限制。
伺服器對Get和Post請求可以進行限制,以Tomcat為例,Connector中的maxHttpHeaderSize限制了Get請求的長度,而maxPostSize則可以限制Post請求的長度。由此可見兩種請求的區別,get請求在Http Header部分,而Post請求在Http Body部分。
2.編碼
Spring的CharacterEncodingFilter和request的setCharacterEncoding僅僅針對Http Body,這兩種方式對於Get請求不起作用。
以Tomcat為例,可以調整URIEncoding引數或者啟用useBodyEncodingForURI來調整Get請求的編碼。URIEncoding預設是ISO-8859-1編碼。
當然,這種方式不具通用性,需要修改中介軟體的配置。
還有一種方法,在前臺頁面透過JS對中文進行兩次編碼。
以如下前臺頁面為例,將兩次編碼的中文資料提交到後臺Servlet。
function get(){
var data='中文請求';
data=encodeURIComponent(encodeURIComponent(data));
document.getElementById("a").href=""+data;
}
Click
Servlet解碼一次,即可得到中文資料。
String name = URLDecoder.decode(request.getParameter("name"),"utf-8");
以"中文請求"為例
前臺JS第一次編碼的結果:%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82
前臺JS第二次編碼的結果:%25E4%25B8%25AD%25E6%2596%2587%25E8%25AF%25B7%25E6%25B1%2582
在第一次編碼之後,資料已經都是ASCII字元,所以二次編碼就是將第一次編碼中的"%"進一步編碼為"%25"
請求到達Tomcat之後,Tomcat會根據URIEncoding自動解碼(預設為ISO-8859-1),所以在進入Servlet的doGet方法之前,資料已經還原為
“%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82”
故最後使用String name = URLDecoder.decode(request.getParameter("name"),"utf-8");就可以得出正確的資料。
這種方式的好處是不用修改中介軟體的配置。缺點是兩次編碼會導致URL膨脹。
3.快取內容
瀏覽器會快取get請求的結果直至過期,這也是JSONP技術需要使用隨機數的原因。
RFC對於Get和Post請求並沒有長度的限制。
但是瀏覽器有限制,比如IE瀏覽器Get請求不能超過2083個字元,而火狐瀏覽器不能超過65536個字元。瀏覽器對於Post請求則沒有限制。
伺服器對Get和Post請求可以進行限制,以Tomcat為例,Connector中的maxHttpHeaderSize限制了Get請求的長度,而maxPostSize則可以限制Post請求的長度。由此可見兩種請求的區別,get請求在Http Header部分,而Post請求在Http Body部分。
2.編碼
Spring的CharacterEncodingFilter和request的setCharacterEncoding僅僅針對Http Body,這兩種方式對於Get請求不起作用。
以Tomcat為例,可以調整URIEncoding引數或者啟用useBodyEncodingForURI來調整Get請求的編碼。URIEncoding預設是ISO-8859-1編碼。
當然,這種方式不具通用性,需要修改中介軟體的配置。
還有一種方法,在前臺頁面透過JS對中文進行兩次編碼。
以如下前臺頁面為例,將兩次編碼的中文資料提交到後臺Servlet。
function get(){
var data='中文請求';
data=encodeURIComponent(encodeURIComponent(data));
document.getElementById("a").href=""+data;
}
Click
Servlet解碼一次,即可得到中文資料。
String name = URLDecoder.decode(request.getParameter("name"),"utf-8");
以"中文請求"為例
前臺JS第一次編碼的結果:%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82
前臺JS第二次編碼的結果:%25E4%25B8%25AD%25E6%2596%2587%25E8%25AF%25B7%25E6%25B1%2582
在第一次編碼之後,資料已經都是ASCII字元,所以二次編碼就是將第一次編碼中的"%"進一步編碼為"%25"
請求到達Tomcat之後,Tomcat會根據URIEncoding自動解碼(預設為ISO-8859-1),所以在進入Servlet的doGet方法之前,資料已經還原為
“%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82”
故最後使用String name = URLDecoder.decode(request.getParameter("name"),"utf-8");就可以得出正確的資料。
這種方式的好處是不用修改中介軟體的配置。缺點是兩次編碼會導致URL膨脹。
3.快取內容
瀏覽器會快取get請求的結果直至過期,這也是JSONP技術需要使用隨機數的原因。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-775925/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP Get,Post請求詳解HTTP
- get請求和post請求區別詳解
- 介面請求 (get、post、head 等) 詳解
- 介面請求(get、post、head等)詳解
- Python中get、post請求詳解(HTTP請求頭、狀態碼)PythonHTTP
- java傳送GET和post請求Java
- PHP傳送POST和GET請求PHP
- Android Http請求框架一:Get 和 Post 請求AndroidHTTP框架
- get和post請求的區別(面試)面試
- iOS 同步請求 非同步請求 GET請求 POST請求iOS非同步
- $.post 和 $.get 設定同步和非同步請求非同步
- http請求之get和post的區別HTTP
- 優雅地使用GET和POST請求方法
- 使用fidder進行post和get請求
- AJAX的POST和GET請求的區別
- JAVA中Get和Post請求的區別Java
- POST與GET請求區別
- get請求和post請求的區別
- vue 發起get請求和post請求Vue
- Servlet中request請求Get和Post方法以及亂碼解決Servlet
- python3 實現 get 和 post 請求Python
- cURL實現傳送Get和Post請求(PHP)PHP
- http請求中get和post方法的區別HTTP
- GET和POST方式請求API介面資料返回API
- 原生js實現Ajax請求,包含get和postJS
- HTTP協議GET和POST請求的區別HTTP協議
- AJAX的get和post請求原生編寫方法
- PHP中使用cURL實現Get和Post請求PHP
- HTTP協議中請求方法的Get和PostHTTP協議
- Android okHttp網路請求之Get/Post請求AndroidHTTP
- 4.爬蟲 requests庫講解 GET請求 POST請求 響應爬蟲
- get與post的請求區別
- go對get、post請求封裝Go封裝
- get,post URL加字尾請求
- Java Http Get Post 請求工具類JavaHTTP
- uni-app的POST請求和GET請求APP
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP