- GET使用URL或Cookie傳參愉择。而POST將數(shù)據(jù)放在BODY中匪凡。
- GET的URL會(huì)有長(zhǎng)度上的限制膊畴,則POST的數(shù)據(jù)則可以非常大。
- POST比GET安全病游,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)唇跨。
這些也是有點(diǎn)誤區(qū)的,就像同步請(qǐng)求一定的慢嗎衬衬?
GET和POST與數(shù)據(jù)如何傳遞沒(méi)有關(guān)系买猖?
GET和POST是由HTTP協(xié)議定義的。在HTTP協(xié)議中滋尉,Method和Data(URL玉控, Body, Header)是正交的兩個(gè)概念狮惜,也就是說(shuō)高诺,使用哪個(gè)Method與應(yīng)用層的數(shù)據(jù)如何傳輸是沒(méi)有相互關(guān)系的。
HTTP沒(méi)有要求讽挟,如果Method是POST數(shù)據(jù)就要放在BODY中懒叛。也沒(méi)有要求,如果Method是GET耽梅,數(shù)據(jù)(參數(shù))就一定要放在URL中而不能放在BODY中薛窥。
那么,網(wǎng)上流傳甚廣的這個(gè)說(shuō)法是從何而來(lái)的呢眼姐?我在HTML標(biāo)準(zhǔn)中诅迷,找到了相似的描述。這和網(wǎng)上流傳的說(shuō)法一致众旗。但是這只是HTML標(biāo)準(zhǔn)對(duì)HTTP協(xié)議的用法的約定罢杉。怎么能當(dāng)成GET和POST的區(qū)別呢?
而且贡歧,現(xiàn)代的Web Server都是支持GET中包含BODY這樣的請(qǐng)求滩租。雖然這種請(qǐng)求不可能從瀏覽器發(fā)出,但是現(xiàn)在的Web Server又不是只給瀏覽器用利朵,已經(jīng)完全地超出了HTML服務(wù)器的范疇了律想。
HTTP協(xié)議對(duì)GET和POST都沒(méi)有對(duì)長(zhǎng)度的限制?
HTTP協(xié)議明確地指出了绍弟,HTTP頭和Body都沒(méi)有長(zhǎng)度的要求技即。而對(duì)于URL長(zhǎng)度上的限制,有兩方面的原因造成:
- 瀏覽器樟遣。據(jù)說(shuō)早期的瀏覽器會(huì)對(duì)URL長(zhǎng)度做限制而叼。據(jù)說(shuō)IE對(duì)URL長(zhǎng)度會(huì)限制在2048個(gè)字符內(nèi)(流傳很廣身笤,而且無(wú)數(shù)同事都表示認(rèn)同)。但我自己試了一 下葵陵,我構(gòu)造了90K的URL通過(guò)IE9訪問(wèn)live.com液荸,是正常的。網(wǎng)上的東西埃难,哪怕是Wikipedia上的莹弊,也不能信。
- 服務(wù)器涡尘。URL長(zhǎng)了忍弛,對(duì)服務(wù)器處理也是一種負(fù)擔(dān)。原本一個(gè)會(huì)話就沒(méi)有多少數(shù)據(jù)考抄,現(xiàn)在如果有人惡意地構(gòu)造幾個(gè)幾M大小的URL细疚,并不停地訪問(wèn)你的服務(wù)器。服 務(wù)器的最大并發(fā)數(shù)顯然會(huì)下降川梅。另一種攻擊方式是疯兼,把告訴服務(wù)器Content-Length是一個(gè)很大的數(shù),然后只給服務(wù)器發(fā)一點(diǎn)兒數(shù)據(jù)贫途,嘿嘿吧彪,服務(wù)器你 就傻等著去吧。哪怕你有超時(shí)設(shè)置丢早,這種故意的次次訪問(wèn)超時(shí)也能讓服務(wù)器吃不了兜著走姨裸。有鑒于此,多數(shù)服務(wù)器出于安全啦怨酝、穩(wěn)定啦方面的考慮傀缩,會(huì)給URL長(zhǎng)度 加限制。但是這個(gè)限制是針對(duì)所有HTTP請(qǐng)求的农猬,與GET赡艰、POST沒(méi)有關(guān)系。
這個(gè)貌似聽(tīng)著對(duì)點(diǎn)吧斤葱。
3.對(duì)于安全不安全講慷垮。
get:
.所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說(shuō)揍堕,GET請(qǐng)求一般不應(yīng)產(chǎn)生副作用料身。就是說(shuō),它僅僅是獲取資源信息鹤啡,就像數(shù)據(jù)庫(kù)查詢一樣,不會(huì)修改蹲嚣,增加數(shù)據(jù)递瑰,不會(huì)影響資源的狀態(tài)祟牲。 * 注意:這里安全的含義僅僅是指是非修改信息。
POST的安全性要比GET的安全性高抖部。注意:這里所說(shuō)的安全性和上面GET提到的“安全”不是同個(gè)概念说贝。上面“安全”的含義僅僅是不作數(shù)據(jù)修改, 而這里安全的含義是真正的Security的含義慎颗,比如:通過(guò)GET提交數(shù)據(jù)乡恕,用戶名和密碼將明文出現(xiàn)在URL上,因?yàn)?1)登錄頁(yè)面有可能被瀏覽器緩 存俯萎, (2)其他人查看瀏覽器的歷史紀(jì)錄傲宜,那么別人就可以拿到你的賬號(hào)和密碼了,除此之外夫啊,使用GET提交數(shù)據(jù)還可能會(huì)造成Cross-site request forgery攻擊 .