HTTP中GET與POST方法的區(qū)別
上一篇 / 下一篇 2010-10-20 21:29:20 / 個人分類:Web知識
看這個之前,,可以先大致看一下我以前的一篇總結(jié)(HTTP請求模型和頭信息):
http://www./index.php?uid-225738-action-viewspace-itemid-216200
做Web測試相關(guān)工作,,了解一下HTTP協(xié)議規(guī)定的8中請求方式中最常用的GET和POST是很有必要的,,現(xiàn)簡單總結(jié)一下吧,,也當(dāng)是自己做個筆記。
1.HTTP協(xié)議的格式:為了理解兩者在傳輸過程中的不同,,我們先看一下HTTP協(xié)議的格式: HTTP請求:
在HTTP請求中,,第一行必須是一個請求行(request
line),用來說明請求類型,、要訪問的資源以及使用的HTTP版本,。緊接著是一個首部(header)小節(jié),,用來說明服務(wù)器要使用的附加信息,。在首部之后是一個空行,再此之后可以添加任意的其他數(shù)據(jù)[稱之為主體(body)],。
GET與POST方法實例:
2.GET與POST的區(qū)別:
HTTP定義了與服務(wù)器交互的不同方法,,最基本的方法是 GET 和 POST.
HTTP-GET和 HTTP-POST是使用HTTP的標(biāo)準(zhǔn)協(xié)議動詞,用于編碼和傳送變量名/變量值對參數(shù),,并且使用相關(guān)的請求語義,。每個HTTP-GET和HTTP- POST都由一系列HTTP請求頭組成,這些請求頭定義了客戶端從服務(wù)器請求了什么,,而響應(yīng)則是由一系列HTTP應(yīng)答頭和應(yīng)答數(shù)據(jù)組成,,如果請求成功則返回應(yīng)答。
HTTP-GET以使用MIME類型application/x-www-form-urlencoded的urlencoded文本的格式傳遞參數(shù),。Urlencoding是一種字符編碼,,保證被傳送的參數(shù)由遵循規(guī)范的文本組成,例如一個空格的編碼是"%20",。附加參數(shù)還能被認(rèn)為是一個查詢字符串,。(GET提交,請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),,以?分割URL和傳輸數(shù)據(jù),,多個參數(shù)用&連接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD,。如果數(shù)據(jù)是英文字母/數(shù)字,,原樣發(fā)送,,如果是空格,轉(zhuǎn)換為+,,如果是中文/其他字符,,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,,其中%XX中的XX為該符號以16進(jìn)制表示的ASCII,。)
與HTTP-GET類似,HTTP-POST參數(shù)也是被URL編碼的,。然而,,變量名/變量值不作為URL的一部分被傳送,而是放在實際的HTTP請求消息內(nèi)部被傳送,。
(1)get是從服務(wù)器上獲取數(shù)據(jù),,post是向服務(wù)器傳送數(shù)據(jù)。
(2)在客戶端,,Get方式在通過URL提交數(shù)據(jù),,數(shù)據(jù)在URL中可以看到;POST方式,,數(shù)據(jù)放置在HTML HEADER內(nèi)提交,。
(3)對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,,對于post方式,,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
(4)GET方式提交的數(shù)據(jù)長度受瀏覽器URL長度的限制,,而POST則沒有此限制,。(特定瀏覽器和服務(wù)器對URL長度有限制,例如IE對URL長度的限制是2083字節(jié)(2K+35),。對于其他瀏覽器,,如Netscape、FireFox等,,理論上沒有長度限制,,其限制取決于操作系統(tǒng)的支持。)
(5)安全性問題,。正如在(2)中提到,,使用 Get 的時候,參數(shù)會顯示在地址欄上,,而 Post 不會,。所以,如果這些數(shù)據(jù)是中文數(shù)據(jù)而且是非敏感數(shù)據(jù),那么使用 get,;如果用戶輸入的數(shù)據(jù)不是中文字符而且包含敏感數(shù)據(jù),,那么還是使用 post為好。
關(guān)于瀏覽器URL長度的限制,,這里我再說明一下:見HTTP的RFC2068文檔,。
HTTP協(xié)議本身未指定任何對URL長度要求。它只是建議不要超過255個字符,。(Servers should be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations may not properly support these lengths. The spec for URL length does not dictate a minimum or maximum URL length, but implementation varies by browser.)
更多相關(guān)知識,,請參考:
http://stone-1231./blog/539191
http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.html
http://blog./u1/55764/showart_2082293.html
http://www./index.php?uid-225738-action-viewspace-itemid-216200
做Web測試相關(guān)工作,,了解一下HTTP協(xié)議規(guī)定的8中請求方式中最常用的GET和POST是很有必要的,,現(xiàn)簡單總結(jié)一下吧,,也當(dāng)是自己做個筆記。
1.HTTP協(xié)議的格式:為了理解兩者在傳輸過程中的不同,,我們先看一下HTTP協(xié)議的格式: HTTP請求:
<request line> <headers> <blank line> [<request-body>] |
GET與POST方法實例:
GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive |
POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive (----此處空一行----) name=Professional%20Ajax&publisher=Wiley |
2.GET與POST的區(qū)別:
HTTP定義了與服務(wù)器交互的不同方法,,最基本的方法是 GET 和 POST.
HTTP-GET和 HTTP-POST是使用HTTP的標(biāo)準(zhǔn)協(xié)議動詞,用于編碼和傳送變量名/變量值對參數(shù),,并且使用相關(guān)的請求語義,。每個HTTP-GET和HTTP- POST都由一系列HTTP請求頭組成,這些請求頭定義了客戶端從服務(wù)器請求了什么,,而響應(yīng)則是由一系列HTTP應(yīng)答頭和應(yīng)答數(shù)據(jù)組成,,如果請求成功則返回應(yīng)答。
HTTP-GET以使用MIME類型application/x-www-form-urlencoded的urlencoded文本的格式傳遞參數(shù),。Urlencoding是一種字符編碼,,保證被傳送的參數(shù)由遵循規(guī)范的文本組成,例如一個空格的編碼是"%20",。附加參數(shù)還能被認(rèn)為是一個查詢字符串,。(GET提交,請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),,以?分割URL和傳輸數(shù)據(jù),,多個參數(shù)用&連接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD,。如果數(shù)據(jù)是英文字母/數(shù)字,,原樣發(fā)送,,如果是空格,轉(zhuǎn)換為+,,如果是中文/其他字符,,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,,其中%XX中的XX為該符號以16進(jìn)制表示的ASCII,。)
與HTTP-GET類似,HTTP-POST參數(shù)也是被URL編碼的,。然而,,變量名/變量值不作為URL的一部分被傳送,而是放在實際的HTTP請求消息內(nèi)部被傳送,。
(1)get是從服務(wù)器上獲取數(shù)據(jù),,post是向服務(wù)器傳送數(shù)據(jù)。
(2)在客戶端,,Get方式在通過URL提交數(shù)據(jù),,數(shù)據(jù)在URL中可以看到;POST方式,,數(shù)據(jù)放置在HTML HEADER內(nèi)提交,。
(3)對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,,對于post方式,,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
(4)GET方式提交的數(shù)據(jù)長度受瀏覽器URL長度的限制,,而POST則沒有此限制,。(特定瀏覽器和服務(wù)器對URL長度有限制,例如IE對URL長度的限制是2083字節(jié)(2K+35),。對于其他瀏覽器,,如Netscape、FireFox等,,理論上沒有長度限制,,其限制取決于操作系統(tǒng)的支持。)
(5)安全性問題,。正如在(2)中提到,,使用 Get 的時候,參數(shù)會顯示在地址欄上,,而 Post 不會,。所以,如果這些數(shù)據(jù)是中文數(shù)據(jù)而且是非敏感數(shù)據(jù),那么使用 get,;如果用戶輸入的數(shù)據(jù)不是中文字符而且包含敏感數(shù)據(jù),,那么還是使用 post為好。
關(guān)于瀏覽器URL長度的限制,,這里我再說明一下:見HTTP的RFC2068文檔,。
HTTP協(xié)議本身未指定任何對URL長度要求。它只是建議不要超過255個字符,。(Servers should be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations may not properly support these lengths. The spec for URL length does not dictate a minimum or maximum URL length, but implementation varies by browser.)
更多相關(guān)知識,,請參考:
http://stone-1231./blog/539191
http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.html
http://blog./u1/55764/showart_2082293.html