post和get的區別



post
和get的區別

post  地址欄不會出現一大串?bjnghfgreygt這樣的東西

如果是get,就會出現了

1、Get 方法通過 URL 請求來傳遞用戶的數據,將表單內各字段名稱與其內容,以成對的字符串連接,置於 action 屬性所指程序的 url 后,如[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url],數據都會 直接顯示在 url 上,就像用戶點擊一個鏈接一樣;Post 方法通過 HTTP post 機制,將表單內各字段名稱與其內容放置在 HTML 表頭(header)內一起傳送給服務器端交由 action 屬性能所指的程序處理,該程序會通過標准輸入(stdin)方式,將表單的數據讀出並加以處理


2、 Get 方式需要使用 Request.QueryString 來取得變量的值;而 Post 方式通過 Request.Form 來訪問提交的內容


3、Get 方式傳輸的數據量非常小,一般限制在 2 KB 左右,但是執行效率卻比 Post 方法好;而 Post 方式傳遞的數據量相對較大,它是等待服務器來讀取數據,不過也有字節限制,這是為了避免對服務器用大量數據進行惡意攻擊,根據微軟方面的說法,微軟對用 Request.Form() 可接收的最大數據有限制,IIS 4 中為 80 KB 字節,IIS 5 中為 100 KB 字節

建議:除非你肯定你提交的數據可以一次性提交,否則請盡量用 Post 方法


4、Get 方式提交數據,會帶來安全問題,比如一個登陸頁面,通過 Get 方式提交數據時,用戶名和密碼將出現在 URL 上,如果頁面可以被緩存或者其他人可以訪問客戶這台機器,就可以從歷史記錄獲得該用戶的帳號和密碼,所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果刷新的時候,會彈出一個對話框

建議:出於安全性考慮,建議最好使用 Post 提交數據

 
post和get的不同之處
GET與POST的區別在於:(對於CGI)
如果以GET方式傳輸,所帶參數附加在CGI程式的URL后直接傳給server,並可從server端的QUERY_STRING這個環境變量中讀取;
如果以POST方式傳輸,則參數會被打包在數據報中傳送給server,並可從CONTENT_LENGTH這個環境變量中讀取出來。
還有一種情況是,你用的是GET方式,但傳送的參數是路徑,如:
----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >
----這時所傳遞的參數"/usr/local/bin/pine"存放在PATH_INFO這個環境變量中。環境變量的讀取方式為$str=$ENV{'QUERY_STRING'};
理論上說,GET是從服務器上請求數據,POST是發送數據到服務器。事實上,GET方法是把數據參數隊列(query string)加到一個URL上,值和表單是一一對應的。比如說,name=John。在隊列里,值和表單用一個&符號分開,空格用 號替換,特殊的符號轉換成十六進制的代碼。因為這一隊列在URL里邊,這樣隊列的參數就能看得到,可以被記錄下來,或更改。通常GET方法還限制字符的大小。事實上POST方法可以沒有時間限制的傳遞數據到服務器,用戶在瀏覽器端是看不到這一過程的,所以POST方法比較適合用於發送一個保密的(比如信用卡號)或者比較大量的數據到服務器。
Post是允許傳輸大量數據的方法,而Get方法會將所要傳輸的數據附在網址后面,然后一起送達服務器,因此傳送的數據量就會受到限制,但是執行效率卻比Post方法好。
對於GET提交的數據,WWW服務器將把數據放在環境變量QUERY_STRING中;對於POST方法,數據被送到WWW服務器的STDOUT中,然后CGI從自己的STDIN中讀取。使用傳統的CGI方法,用戶必須自己編程來處理這些數據。
GET與POST的區別在於,如果以GET方式傳輸,所帶參數附加在CGI程式的URL后直接傳給server,並可從server端的QUERY_STRING這個環境變量中讀取;如果以POST方式傳輸,則參數會被打包在數據報中傳送給server,並可從CONTENT_LENGTH這個環境變量中讀取出來。還有一種情況是,你用的是GET方式,但傳送的參數是路徑,如: 

----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a > 

----這時所傳遞的參數"/usr/local/bin/pine"存放在PATH_INFO這個環境變量中。環境變量的讀取方式為$str=$ENV{'QUERY_STRING'};
總結起來:
get方式:以URL字串本身傳遞數據參數,在服務器端可以從'QUERY_STRING'這個變量中直接讀取,效率較高,但缺乏安全性,也無法來處理復雜的數據(只能是字符串,比如在servlet/jsp中就無法處理發揮java的比如vector之類的功能);
post方式:就傳輸方式講參數會被打包在數據報中傳輸,從CONTENT_LENGTH這個環境變量中讀取,便於傳送較大一些的數據,同時因為不暴露數據在瀏覽器的地址欄中,安全性相對較高,但這樣的處理效率會受到影響。
-------------------
 
在表單里使用”post””get”有什么區別
Form 里面,可以使用 post 也可以使用 get 。它們都是 method 的合法取值。但是, post get 方法在使用上至少有兩點不同:
1
Get 方法通過 URL 請求來傳遞用戶的輸入。 Post 方法通過另外的形式。
2
Get 方式的提交你需要用 Request.QueryString 來取得變量的值,而 Post 方式提交時,你必須通過 Request.Form 來訪問提交的內容。

仔細研究下面的代碼。你可以運行之來感受一下:

代碼
<!--
兩個 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 %>
通過 get 方法傳遞來的 字符 串是:  “<B><%= Request.QueryString(“Text”) %></B>“<BR>
<% End If %>

<% If Request.Form(“Text”) <> ““ Then %>
通過 Post 方法傳遞來的 字符 串是:  “<B><%= Request.Form(“Text”) %></B>“<BR>
<% End If %>

說明
把上面的代碼保存為 getpost.asp ,然后運行,首先測試 post 方法,這時候,瀏覽器的 url 並沒有什么變化,返回的結果是:
通過 Post 方法傳遞來的 字符 串是:  "Hello World"
然后測試用 get 方法提交,請注意,瀏覽器的 url 變成了:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的結果是:
通過 get 方法傳遞來的 字符 串是:  "Hello World"
最后再通過 post 方法提交,瀏覽器的 url 還是:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的結果變成:
通過 get 方法傳遞來的 字符 串是:  "Hello World"
通過 Post 方法傳遞來的 字符 串是:  "Hello World"

提示
通過 get 方法提交數據,可能會帶來安全性的問題。比如一個登陸頁面。當通過 get 方法提交數據時,用戶名和密碼將出現在 URL 上。如果:
1、 登陸頁面可以被瀏覽器緩存;
2、 其他人可以訪問客戶的這台機器。
那么,別人即可以從瀏覽器的歷史記錄中,讀取到此客戶的賬號和密碼。所以,在某些情況下, get 方法會帶來嚴重的安全性問題。
建議
Form 中,建議使用 post 方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM