GET POST 區(qū)別詳解
來源:易賢網(wǎng) 閱讀:802 次 日期:2016-06-24 11:20:32
溫馨提示:易賢網(wǎng)小編為您整理了“GET POST 區(qū)別詳解”,方便廣大網(wǎng)友查閱!

1、Get是用來從服務(wù)器上獲得數(shù)據(jù),而Post是用來向服務(wù)器上傳遞數(shù)據(jù)。

2、Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值相對應(yīng)的方式,傳遞到action所指向URL。

3、Get是不安全的,因為在傳輸過程,數(shù)據(jù)被放在請求的URL中,而如今現(xiàn)有的很多服務(wù)器、代理服務(wù)器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)據(jù),一些系統(tǒng)內(nèi)部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。

4、Get傳輸?shù)臄?shù)據(jù)量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用Post(當(dāng)然還有一個原因,將在后面的提到)。

5、Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符;而Post支持整個ISO10646字符集。默認(rèn)是用ISO-8859-1編碼

6、Get是Form的默認(rèn)方法。

以下的比較非常非常使用:

做java的web開發(fā)有段日子了,有個問題老是困擾著我,就是亂碼問題,基本上是網(wǎng)上查找解決方案(網(wǎng)上資料真的很多),都是一大堆的介紹如何解決此類的亂碼問題,但是沒幾個把問題的來龍去脈說清楚的,有時候看了些文章后,以為自己懂了,但是在開發(fā)中亂碼問題又像鬼魂一樣出來嚇人,真是頭大了!這篇文章是我長時間和亂碼做斗爭的一些理解的積累,還希望有更多的朋友給出指點和補充。

form有2中方法把數(shù)據(jù)提交給服務(wù)器,get和post,分別說下吧。

(一)get提交

1.首先說下客戶端(瀏覽器)的form表單用get方法是如何將數(shù)據(jù)編碼后提交給服務(wù)器端的吧。

對于get方法來說,都是把數(shù)據(jù)串聯(lián)在請求的url后面作為參數(shù),如:http://localhost:8080/servlet?msg=abc

(很常見的一個亂碼問題就要出現(xiàn)了,如果url中出現(xiàn)中文或其它特殊字符的話,如:http://localhost:8080/servlet?msg=杭州,服務(wù)器端容易得到亂碼),url拼接完成后,瀏覽器會對url進行URLencode,然后發(fā)送給服務(wù)器,URLencode的過程就是把部分url做為字符,按照某種編碼方式(如:utf-8,gbk等)編碼成二進制的字節(jié)碼,然后每個字節(jié)用一個包含3個字符的字符串"%xy"表示,其中xy為該字節(jié)的兩位十六進制表示形式。我這里說的可能不清楚,具體介紹可以看下java.net.URLEncoder類的介紹在這里。了解了URLencode的過程,我們能看到2個很重要的問題,第一:需要URLencode的字符一般都是非ASCII的字符(籠統(tǒng)的講),再通俗的講就是除了英文字母以外的文字(如:中文,日文等)都要進行URLencode,所以對于我們來說,都是英文字母的url不會出現(xiàn)服務(wù)器得到亂碼問題,出現(xiàn)亂碼都是url里面帶了中文或特殊字符造成的;第二:URLencode到底按照那種編碼方式對字符編碼?這里就是瀏覽器的事情了,而且不同的瀏覽器有不同的做法,中文版的瀏覽器一般會默認(rèn)的使用GBK,通過設(shè)置瀏覽器也可以使用UTF-8,可能不同的用戶就有不同的瀏覽器設(shè)置,也就造成不同的編碼方式,所以很多網(wǎng)站的做法都是先把url里面的中文或特殊字符用javascript做URLencode,然后再拼接url提交數(shù)據(jù),也就是替瀏覽器做了URLencode,好處就是網(wǎng)站可以統(tǒng)一get方法提交數(shù)據(jù)的編碼方式。完成了URLencode,那么現(xiàn)在的url就成了ASCII范圍內(nèi)的字符了,然后以iso-8859-1的編碼方式轉(zhuǎn)換成二進制隨著請求頭一起發(fā)送出去。這里想多說幾句的是,對于get方法來說,沒有請求實體,含有數(shù)據(jù)的url都在請求頭里面,之所以用URLencode,我個人覺的原因是:對于請求頭來說最終都是要用iso-8859-1編碼方式編碼成二進制的101010.....的純數(shù)據(jù)在互聯(lián)網(wǎng)上傳送,如果直接將含有中文等特殊字符做iso-8859-1編碼會丟失信息,所以先做URLencode是有必要的。

2。服務(wù)器端(tomcat)是如何將數(shù)據(jù)獲取到進行解碼的。

第一步是先把數(shù)據(jù)用iso-8859-1進行解碼,對于get方法來說,tomcat獲取數(shù)據(jù)的是ASCII范圍內(nèi)的請求頭字符,其中的請求url里面帶有參數(shù)數(shù)據(jù),如果參數(shù)中有中文等特殊字符,那么目前還是URLencode后的%XY狀態(tài),先停下,我們先說下開發(fā)人員一般獲取數(shù)據(jù)的過程。通常大家都是request.getParameter("name")獲取參數(shù)數(shù)據(jù),我們在request對象或得的數(shù)據(jù)都是經(jīng)過解碼過的,而解碼過程中程序里是無法指定,這里要說下,有很多新手說用request.setCharacterEncoding("字符集")可以指定解碼方式,其實是不可以的,看servlet的官方API說明有對此方法的解釋:Overridesthenameofthecharacterencodingusedinthebodyofthisrequest.ThismethodmustbecalledpriortoreadingrequestparametersorreadinginputusinggetReader().可以看出對于get方法他是無能為力的。那么到底用什么編碼方式解碼數(shù)據(jù)的呢,這是tomcat的事情了,默認(rèn)缺省用的是iso-8859-1,這樣我們就能找到為什么get請求帶中文參數(shù)為什么在服務(wù)器端得到亂碼了,原因是在客戶端一般都是用UTF-8或GBK對數(shù)據(jù)URLencode,這里用iso-8859-1方式URLdecoder顯然不行,在程序里我們可以直接

Java代碼

1.newString(request.getParameter("name").getBytes("iso-8859-1"),"客戶端指定的URLencode編碼方式")

還原回字節(jié)碼,然后用正確的方式解碼數(shù)據(jù),網(wǎng)上的文章通常是在tomcat里面做個配置

Xml代碼

1.<Connectorport="8080"protocol="HTTP/1.1"maxThreads="150"connectionTimeout="20000"redirectPort="8443"URIEncoding="GBK"/>

這樣是讓tomcat在獲取數(shù)據(jù)后用指定的方式URLdecoder,URLdecoder的介紹在這里

(一)post提交

1.客戶端(瀏覽器)的form表單用post方法是如何將數(shù)據(jù)編碼后提交給服務(wù)器端的。

在post方法里所要傳送的數(shù)據(jù)也要URLencode,那么他是用什么編碼方式的呢?

在form所在的html文件里如果有段<metahttp-equiv="Content-Type"content="text/html;charset=字符集(GBK,utf-8等)"/>,那么post就會用此處指定的編碼方式編碼。一般大家都認(rèn)為這段代碼是為了讓瀏覽器知道用什么字符集來對網(wǎng)頁解釋,所以網(wǎng)站都會把它放在html代碼的最前端,盡量不出現(xiàn)亂碼,其實它還有個作用就是指定form表單的post方法提交數(shù)據(jù)的URLencode編碼方式。從這里可以看出對于get方法來數(shù),瀏覽器對數(shù)據(jù)的URLencode的編碼方式是有瀏覽器設(shè)置來決定,(可以用js做統(tǒng)一指定),而post方法,開發(fā)人員可以指定。

2。服務(wù)器端(tomcat)是如何將數(shù)據(jù)獲取到進行解碼的。

如果用tomcat默認(rèn)缺省設(shè)置,也沒做過濾器等編碼設(shè)置,那么他也是用iso-8859-1解碼的,但是request.setCharacterEncoding("字符集")可以派上用場。

用post很重要的在form所在的html文件里如果有段<metahttp-equiv="Content-Type"content="text/html;charset=字符集(GBK,utf-8等)"/>

強烈建議使用post提交

更多信息請查看網(wǎng)頁制作
易賢網(wǎng)手機網(wǎng)站地址:GET POST 區(qū)別詳解
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)