HTTP請求:GET與POST方法的區別(轉)

HTTP 定義了與服務器交互的不同方法,最基本的方法是 GET 和 POST。事實上 GET 適用於多數請求,而保留 POST 僅用於更新站點。根據 HTTP 規範,GET 用於信息獲取,而且應該是 安全的和 冪等的。所謂安全的意味着該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味着對同一 URL 的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,她可以確信從自身的角度來看沒有改變資源。 比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認爲是安全的和冪等的,因爲它總是返回當前的新聞。反之亦然。POST 請求就不那麼輕鬆了。POST 表示可能改變服務器上的資源的請求。仍然以新聞站點爲例,讀者對文章的註解應該通過 POST 請求實現,因爲在註解提交之後站點已經不同了(比方說文章下面出現一條註解);
 
在FORM提交的時候,如果不指定Method,則默認爲GET請求,Form中提交的數據將會附加在url之後,以?分開與url分開。字母數字字符原 樣發送,但空格轉換爲“+“號,其它符號轉換爲%XX,其中XX爲該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;

GET方式提交的數據最多隻能有2048 字節(URL+參數),而POST則沒有此限制。
官方說明:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q208427

 

使用post與使用get區別(asp)

一、 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” VALUE=“Hello World”></INPUT>

<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>

</FORM>

<BR>

<FORM ACTION=“getpost.asp” METHOD=“post”>

<INPUT TYPE=“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 方法。

 

二、 <form action="" method="post"> 刷新時會彈出提示框,問是否重新發送請求,若改爲 method=get 則不會有該提示,以下是 post get 的一些區別

 

 post 請求無長度限制(至少是理論上的)

 get 有長度限制,最長不超過2048 字節(1024 個漢字)

 

三、 還記得 Request.QueryString() 嗎,只要是用 get 傳遞值,那麼都會跟在 http 請求的串後面!可以試試!而 post 則不會在 http 請求串的後面,而是在請求的最後面!而且看不見的,一般密碼可一定得這樣傳了,否則在地址欄裏可以直接看見!!(雖然都不加密)

還有就是 post 傳的內容多一些

再就是一般的用 IIS 過濾器的只接受get 參數,這就是爲什麼那些大型搜索引擎後面都是一大堆的內容了,因爲 post 不能發過去,只能用 get 。看看 Goole 或是 yahoo 等知道了!

 

四、 表單提交中get post 方式的區別歸納如下幾點:

1. get 是從服務器上獲取數據, post 是向服務器傳送數據。

2.  get 是把參數數據隊列加到提交表單的 ACTION 屬性所指的 URL 中,值和表單內各個字段一一對應,在 URL 中可以看到。 post 是通過 HTTP post 機制,將表單內各個字段與其內容放置在 HTML HEADER 內一起傳送到 ACTION 屬性所指的 URL 地址。用戶看不到這個過程。

3. 對於 get 方式,服務器端用 Request.QueryString 獲取變量的值,對於 post 方式,服務器端用 Request.Form 獲取提交的數據。

4. get 傳送的數據量較小,不能大於 2KB post 傳送的數據量較大,一般被默認爲不受限制。但理論上, IIS4 中最大量爲 80KB IIS5 中爲 100KB

5.  get 安全性非常低, post 安全性較高。

 

             

Get Post 的區別 ( jsp)

 

Get Post 的區別好像比我想象中的大,最近在使用 Tomcat 進行開發的過程中至少發現兩點:

 

一、這兩者傳遞參數時所用的編碼不一定是一樣的。在 Tomcat 中似乎 Get 的編碼方式是根據頁面中指定的編碼方式,而 Post 則是一直使用同一種編碼方式,可在 Tomcat server.xml 中配置。

 

二、使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。

 

所以,如果這些數據是中文數據而且是非敏感數據,那麼使用 get ;如果用戶輸入的數據不是中文字符而且包含敏感數據,那麼還是使用 post 爲好。

 

 

 

他們傳遞參數的時候編碼不一樣,get 方式不進行編碼直接進行傳遞,所以別人可以看見你的傳遞內容(當然可以採取措施避免用戶看到內容,比如用Javascript 動態組織URL ),post 方式是經過編碼傳輸的,而且不存在特殊字符傳遞出錯問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章