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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 介面請求 (get、post、head 等) 詳解
- 介面請求(get、post、head等)詳解
- Python中get、post請求詳解(HTTP請求頭、狀態碼)PythonHTTP
- java傳送GET和post請求Java
- 優雅地使用GET和POST請求方法
- http請求之get和post的區別HTTP
- python3 實現 get 和 post 請求Python
- get和post請求的區別(面試)面試
- POST與GET請求區別
- vue 發起get請求和post請求Vue
- get請求和post請求的區別
- Servlet中request請求Get和Post方法以及亂碼解決Servlet
- cURL實現傳送Get和Post請求(PHP)PHP
- http請求中get和post方法的區別HTTP
- 原生js實現Ajax請求,包含get和postJS
- GET和POST方式請求API介面資料返回API
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 4.爬蟲 requests庫講解 GET請求 POST請求 響應爬蟲
- axios 發get,post 請求小結iOS
- get與post的請求區別
- Java Http Get Post 請求工具類JavaHTTP
- go對get、post請求封裝Go封裝
- get,post URL加字尾請求
- uni-app的POST請求和GET請求APP
- GET和POST兩種基本請求方法的區別
- Linux curl 命令模擬 POST/GET 請求Linux
- httprequest- post- get -傳送請求HTTP
- file_get_contents傳送post請求
- 淺談HTTP中GET和POST請求方式的區別HTTP
- ajax 請求的時候 get 和 post 方式的區別?
- ajax的post或者get伺服器請求伺服器
- postman(二):使用postman傳送get or post請求Postman
- RestTemplate exchange GET POST請求傳引數DEMOREST
- Vue中通過Axios向SpringBoot傳送get和post請求VueiOSSpring Boot
- Golang:使用go-resty/resty傳送http請求get和postGolangRESTHTTP
- node.js的express模組實現GET和POST請求Node.jsExpress
- vue axios資料請求get、post方法的使用VueiOS
- java apache commons HttpClient傳送get和post請求的學習整理JavaApacheHTTPclient
- axios模擬GET請求例項及詳解iOS