Http定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,
我們可以這樣認(rèn)為:一個URL地址,它用于描述一個網(wǎng)絡(luò)上的資源,而HTTP中的GET,POST,PUT,DELETE就對應(yīng)著對這個資源的
查,改,增,刪4個操作。到這里,大家應(yīng)該有個大概的了解了,GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。
(1)GET提交,請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在請求行(request line)中),以?分割URL和傳輸數(shù)據(jù),多個參數(shù)用&連接;
例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。Url的編碼格式采用的是ASCII碼,而不是Unicode,
這也就是說你不能在Url中包含任何非ASCII字符,所有非ASCII字符均需要編碼再傳輸,關(guān)于Url編碼可參考:http://kb.cnblogs.com/page/133765/。
POST提交:把提交的數(shù)據(jù)放置在是HTTP包的包體中。上文示例中紅色字體標(biāo)明的就是實(shí)際的傳輸數(shù)據(jù)
因此,GET提交的數(shù)據(jù)會在地址欄中顯示出來,而POST提交,地址欄不會改變
(2)傳輸數(shù)據(jù)的大小,HTTP協(xié)議沒有對傳輸?shù)臄?shù)據(jù)大小進(jìn)行限制,HTTP協(xié)議規(guī)范也沒有對URL長度進(jìn)行限制。
而在實(shí)際開發(fā)中存在的限制主要有:
GET:特定瀏覽器和服務(wù)器對URL長度有限制,例如IE對URL長度的限制是2083字節(jié)(2K+35),
對于其他瀏覽器如Netscape、FireFox等,理論上沒有長度限制,其限制取決于操作系統(tǒng)的支持。
因此對于GET提交時,傳輸數(shù)據(jù)就會受到URL長度的限制。
POST:由于不是通過URL傳值,理論上數(shù)據(jù)不受限。但實(shí)際各個WEB服務(wù)器會規(guī)定對post提交數(shù)據(jù)大小進(jìn)行限制,Apache、IIS6都有各自的配置。
(3)安全性:
.POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數(shù)據(jù)修改,而這 里安全的含義是真正的Security的含義,比如:通過GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上,因?yàn)?1)登錄頁面有可能被瀏覽器緩存, (2)其他人查看瀏覽器的歷史紀(jì)錄,那么別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交數(shù)據(jù)還可能會造成Cross-site request forgery攻擊
(4)Http get,post,soap協(xié)議都是在http上運(yùn)行的
1)get:請求參數(shù)是作為一個key/value對的序列(查詢字符串)附加到URL上的
查詢字符串的長度受到web瀏覽器和web服務(wù)器的限制(如IE最多支持2048個字符),不適合傳輸大型數(shù)據(jù)集同時,它很不安全
2)post:請求參數(shù)是在http標(biāo)題的一個不同部分(名為entity body)傳輸?shù)模?/p>
這一部分用來傳輸表單信息,因此必須將Content-type設(shè)置為:application/x-www-form-urlencoded。
post設(shè)計(jì)用來支持web窗體上的用戶字段,其參數(shù)也是作為key/value對傳輸。
一般我們提交表單使用的方法為post