post和get請(qǐng)求方式的區(qū)別
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
表單提交中Get和Post方式的區(qū)別有5點(diǎn)
1.get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。 2.get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。post是通過(guò)HTTPpost機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個(gè)過(guò)程。 3.對(duì)于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對(duì)于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。 4.get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 5.get安全性非常低,post安全性較高。 HTTP請(qǐng)求:GET與POST方法的區(qū)別 HTTP 定義了與服務(wù)器交互的不同方法,最基本的方法是 GET 和 POST。事實(shí)上 GET 適用于多數(shù)請(qǐng)求,而保留 POST僅用于更新站點(diǎn)。根據(jù) HTTP 規(guī)范,GET 用于信息獲取,而且應(yīng)該是安全的和冪等的。所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說(shuō),GET 請(qǐng)求一般不應(yīng)產(chǎn)生副作用。冪等的意味著對(duì)同一 URL的多個(gè)請(qǐng)求應(yīng)該返回同樣的結(jié)果。完整的定義并不像看起來(lái)那樣嚴(yán)格。從根本上講,其目標(biāo)是當(dāng)用戶打開(kāi)一個(gè)鏈接時(shí),她可以確信從自身的角度來(lái)看沒(méi)有改變資源。比如,新聞?wù)军c(diǎn)的頭版不斷更新。雖然第二次請(qǐng)求會(huì)返回不同的一批新聞,該操作仍然被認(rèn)為是安全的和冪等的,因?yàn)樗偸欠祷禺?dāng)前的新聞。反之亦然。POST請(qǐng)求就不那么輕松了。POST 表示可能改變服務(wù)器上的資源的請(qǐng)求。仍然以新聞?wù)军c(diǎn)為例,讀者對(duì)文章的注解應(yīng)該通過(guò) POST請(qǐng)求實(shí)現(xiàn),因?yàn)樵谧⒔馓峤恢笳军c(diǎn)已經(jīng)不同了(比方說(shuō)文章下面出現(xiàn)一條注解); 在FORM提交的時(shí)候,如果不指定Method,則默認(rèn)為GET請(qǐng)求,F(xiàn)orm中提交的數(shù)據(jù)將會(huì)附加在url之后,以?分開(kāi)與url分開(kāi)。字母數(shù)字字符原樣發(fā)送,但空格轉(zhuǎn)換為“+“號(hào),其它符號(hào)轉(zhuǎn)換為%XX,其中XX為該符號(hào)以16進(jìn)制表示的ASCII(或ISOLatin-1)值。GET請(qǐng)求請(qǐng)?zhí)峤坏臄?shù)據(jù)放置在HTTP請(qǐng)求協(xié)議頭中,而POST提交的數(shù)據(jù)則放在實(shí)體數(shù)據(jù)中; GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒(méi)有此限制。 在表單里使用”post”和”get”有什么區(qū)別 在Form里面,可以使用post也可以使用get。它們都是method的合法取值。但是,post和get方法在使用上至少有兩點(diǎn)不同: 1、Get方法通過(guò)URL請(qǐng)求來(lái)傳遞用戶的輸入。Post方法通過(guò)另外的形式。 2、Get方式的提交你需要用Request.QueryString來(lái)取得變量的值,而Post方式提交時(shí),你必須通過(guò)Request.Form來(lái)訪問(wèn)提交的內(nèi)容。 仔細(xì)研究下面的代碼。你可以運(yùn)行之來(lái)感受一下: 代碼 〈!--兩個(gè)Form只有Method屬性不同--〉 〈FORM ACTION=“getpost.asp” METHOD=“get”? 〈INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”〉〈/INPUT〉 〈INPUT TYPE=“submit” VALUE=“Method=Get”〉〈/INPUT〉 〈/FORM〉 〈BR〉 〈FORM ACTION=“getpost.asp” METHOD=“post”〉 〈INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”〉〈/INPUT〉 〈INPUT TYPE=“submit” VALUE=“Method=Post”〉〈/INPUT〉 〈/FORM〉 〈BR〉 〈BR〉 〈% If Request.QueryString(“Text”) 〈〉 ““ Then %〉 通過(guò)get方法傳遞來(lái)的字符串是: “〈B〉〈%= Request.QueryString(“Text”) %〉〈/B〉“〈BR〉 〈% End If %〉 〈% If Request.Form(“Text”) 〈〉 ““ Then %〉 通過(guò)Post方法傳遞來(lái)的字符串是: “〈B〉〈%= Request.Form(“Text”) %〉〈/B〉“〈BR〉 〈% End If %〉 說(shuō)明 把上面的代碼保存為getpost.asp,然后運(yùn)行,首先測(cè)試post方法,這時(shí)候,瀏覽器的url并沒(méi)有什么變化,返回的結(jié)果是: 通過(guò)Post方法傳遞來(lái)的字符串是: "Hello World" 然后測(cè)試用get方法提交,請(qǐng)注意,瀏覽器的url變成了: /general/form/getpost.asp?Text=Hello+World 而返回的結(jié)果是: 通過(guò)get方法傳遞來(lái)的字符串是: "Hello World" 最后再通過(guò)post方法提交,瀏覽器的url還是: /general/form/getpost.asp?Text=Hello+World 而返回的結(jié)果變成: 通過(guò)get方法傳遞來(lái)的字符串是: "Hello World" 通過(guò)Post方法傳遞來(lái)的字符串是: "Hello World" 提示 通過(guò)get方法提交數(shù)據(jù),可能會(huì)帶來(lái)安全性的問(wèn)題。比如一個(gè)登陸頁(yè)面。當(dāng)通過(guò)get方法提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上。如果: 1、 登陸頁(yè)面可以被瀏覽器緩存; 2、 其他人可以訪問(wèn)客戶的這臺(tái)機(jī)器。 那么,別人即可以從瀏覽器的歷史記錄中,讀取到此客戶的賬號(hào)和密碼。所以,在某些情況下,get方法會(huì)帶來(lái)嚴(yán)重的安全性問(wèn)題。 建議 在Form中,建議使用post方法。 get與post的區(qū)別2 Get:是以實(shí)體的方式得到由請(qǐng)求URI所指定資源的信息,如果請(qǐng)求URI只是一個(gè)數(shù)據(jù)產(chǎn)生過(guò)程,那么最終要在響應(yīng)實(shí)體中返回的是處理過(guò)程的結(jié)果所指向的資源,而不是處理過(guò)程的描述。 Post:用來(lái)向目的服務(wù)器發(fā)出請(qǐng)求,要求它接受被附在請(qǐng)求后的實(shí)體,并把它當(dāng)作請(qǐng)求隊(duì)列中請(qǐng)求URI所指定資源的附加新子項(xiàng),Post被設(shè)計(jì)成用統(tǒng)一的方法實(shí)現(xiàn)下列功能: 1:對(duì)現(xiàn)有資源的解釋 2:向電子公告欄、新聞組、郵件列表或類似討論組發(fā)信息。 3:提交數(shù)據(jù)塊 4:通過(guò)附加操作來(lái)擴(kuò)展數(shù)據(jù)庫(kù) 從上面描述可以看出,Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求;而Post是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求,要提交的數(shù)據(jù)位于信息頭后面的實(shí)體中。 很理論化,但是很標(biāo)準(zhǔn),method=“get”并不是從服務(wù)器上獲取數(shù)據(jù),get和post 只是發(fā)送機(jī)制不同,并不是一個(gè)取一個(gè)發(fā)! get方法會(huì)在IE地址欄里顯示表示你提交時(shí)候所帶的值;post方法不會(huì) 1、get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。post是通過(guò)HTTPpost機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個(gè)過(guò)程。 2、對(duì)于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對(duì)于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。兩種方式的參數(shù)都可以用Request來(lái)獲得。 3、get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 4、get安全性非常低,post安全性較高。 5、 〈form method="get" action="a.asp?b=b"〉跟〈form method="get"action="a.asp"〉是一樣的,也就是說(shuō),action頁(yè)面后邊帶的參數(shù)列表會(huì)被忽視;而〈formmethod="post" action="a.asp?b=b"〉跟〈form method="post"action="a.asp"〉是不一樣的。 另外,Get請(qǐng)求有如下特性:它會(huì)將數(shù)據(jù)添加到URL中,通過(guò)這種方式傳遞到服務(wù)器,通常利用一個(gè)問(wèn)號(hào)?代表URL地址的結(jié)尾與數(shù)據(jù)參數(shù)的開(kāi)端,后面的參數(shù)每一個(gè)數(shù)據(jù)參數(shù)以“名稱=值”的形式出現(xiàn),參數(shù)與參數(shù)之間利用一個(gè)連接符&來(lái)區(qū)分。 Post請(qǐng)求有如下特性:數(shù)據(jù)是放在HTTP主體中的,其組織方式不只一種,有&連接方式,也有分割符方式,可隱藏參數(shù),傳遞大批數(shù)據(jù),比較方便。 post 地址欄不會(huì)出現(xiàn)一大串?bjnghfgreygt這樣的東西 如果是get,就會(huì)出現(xiàn)了 1、Get 方法通過(guò) URL 請(qǐng)求來(lái)傳遞用戶的數(shù)據(jù),將表單內(nèi)各字段名稱與其內(nèi)容,以成對(duì)的字符串連接,置于 action 屬性所指程序的 url后,如http://www.mdm.com/test.asp?name=asd&password=sad,數(shù)據(jù)都會(huì)直接顯示在 url 上,就像用戶點(diǎn)擊一個(gè)鏈接一樣;Post 方法通過(guò) HTTP post 機(jī)制,將表單內(nèi)各字段名稱與其內(nèi)容放置在 HTML表頭(header)內(nèi)一起傳送給服務(wù)器端交由 action屬性能所指的程序處理,該程序會(huì)通過(guò)標(biāo)準(zhǔn)輸入(stdin)方式,將表單的數(shù)據(jù)讀出并加以處理 2、 Get 方式需要使用 Request.QueryString 來(lái)取得變量的值;而 Post 方式通過(guò) Request.Form 來(lái)訪問(wèn)提交的內(nèi)容 3、 Get 方式傳輸?shù)臄?shù)據(jù)量非常小,一般限制在 2 KB 左右,但是執(zhí)行效率卻比 Post 方法好;而 Post方式傳遞的數(shù)據(jù)量相對(duì)較大,它是等待服務(wù)器來(lái)讀取數(shù)據(jù),不過(guò)也有字節(jié)限制,這是為了避免對(duì)服務(wù)器用大量數(shù)據(jù)進(jìn)行惡意攻擊,根據(jù)微軟方面的說(shuō)法,微軟對(duì)用Request.Form() 可接收的最大數(shù)據(jù)有限制,IIS 4 中為 80 KB 字節(jié),IIS 5 中為 100 KB 字節(jié) 建議:除非你肯定你提交的數(shù)據(jù)可以一次性提交,否則請(qǐng)盡量用 Post 方法 4、 Get 方式提交數(shù)據(jù),會(huì)帶來(lái)安全問(wèn)題,比如一個(gè)登陸頁(yè)面,通過(guò) Get 方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在 URL上,如果頁(yè)面可以被緩存或者其他人可以訪問(wèn)客戶這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶的帳號(hào)和密碼,所以表單提交建議使用 Post 方法;Post方法提交的表單頁(yè)面常見(jiàn)的問(wèn)題是,該頁(yè)面如果刷新的時(shí)候,會(huì)彈出一個(gè)對(duì)話框 1、get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。post是通過(guò)HTTPpost機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個(gè)過(guò)程。 2、 對(duì)于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對(duì)于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。兩種方式的參數(shù)都可以用Request來(lái)獲得。 3、get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 4、get安全性非常低,post安全性較高。 5、〈form method="get" action="a.asp?b=b"〉跟〈form method="get"action="a.asp"〉是一樣的,也就是說(shuō),action頁(yè)面后邊帶的參數(shù)列表會(huì)被忽視;而〈formmethod="post" action="a.asp?b=b"〉跟〈form method="post"action="a.asp"〉是不一樣的。 該文章在 2010/8/13 17:55:43 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |