-
(解決請求亂碼)瀏覽器編碼,服務器解碼
請求由請求行、請求頭、請求體三部分組成
無論是get請求還是post請求,瀏覽器按照頁面編碼對參數進行編碼併發送給服務器(如果頁面不指定編碼默認爲操作系統編碼gb2312),
get請求參數通過請求行Request URL發送,服務器接收參數按照tomcat默認編碼解碼 ,tomcat的server.xml配置文件中有URIEncoding屬性(我的tomcat爲8.5版本所以沒有發生亂碼,8.0之後的tomcat默認編碼爲utf-8;8.0之前的tomcat默認編碼爲iso8859-1所以會亂碼)
<Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/> </Service>
post請求參數通過請求體Request Body發送,tomcat中設置的默認編碼只能解決請求行(即URL)上的中文參數 ,服務器對請求體中的參數解碼需要通過request.setCharacterEncoding(“utf-8”) 來告訴服務器用utf-8的編碼形式對請求體進行解碼(服務器對請求體的默認解碼編碼格式爲iso8859-1),
默認編碼格式:
- 瀏覽器對請求體的默認編碼爲iso8859-1,若頁面指定編碼格式,則瀏覽器以指定的頁面編碼格式對請求體編碼(請求行參數同理)
- 服務器對請求參數的解碼分兩種情況。
第一種是對get請求的請求行參數解碼,若tomcat在8.0以上版本的話,默認解碼編碼格式爲utf-8;若tomcat在8.0以下版本的話,默認解碼編碼格式爲iso8859-1。
第二種是對post請求的請求體參數解碼,tomcat默認對請求體解碼編碼格式爲iso8859-1
-
(解決響應亂碼)服務器編碼,瀏覽器解碼
響應由響應行、響應頭、響應體三部分組成
無論get請求響應還是post請求響應,都是在服務器處理好數據之後響應瀏覽器,如果服務器端不指定響應編碼,那麼服務器端對響應體的默認編碼爲iso8859-1,服務器通過response.setContentType(“text/html;charset=utf-8”)將響應體中的內容用utf-8編碼,同時告訴瀏覽器用utf-8對響應體進行解碼
-
在瀏覽器上如何查看頁面編碼格式
答:F12打開開發者工具,console控制檯上輸入下面兩個命令- document.charset
- document.characterSet