3.10日(rì)音(yīn)訊,Ω Post、Get的(de)作(zuò)用(yòng)和(hé)差異,POSTγ♥<表示可(kě)能(néng)修改變服務器(₹ qì)上(shàng)的(de)資源的(de)請(qǐng)求。繼續引用✔♣(yòng)上(shàng)面的(de)例子(zǐ):還(h€€ái)是(shì)新聞以網站(zhàn)為(wèi)例,讀(dú)者對(du¥ ì)新聞發表自(zì)己的(de)評論應該通(tōng)過P♣×∞OST實現(xiàn),因為(wèi)在評論提交後站(zhàn)↓≈<點的(de)資源已經不(bù)同了(le),或者說(shuō)資≥∏↓®源被修改了(le)。
上(shàng)面大(dà)概說(sh©β>¥uō)了(le)一(yī)下(xià)HTTP規範中G♦γ<ET和(hé)POST的(de)一(yī)些(xiē)原理(↓↑lǐ)性的(de)問(wèn)題。但(d₽∏§àn)在實際的(de)做(zuò)的(de)時(shí)候,很(hěn)多(dε← ≤uō)人(rén)卻沒有(yǒu)按照(zhào)HTTP規範去(qù)α"↕做(zuò),導緻這(zhè)個(gè)問(wèn)題的(de)原♣÷因有(yǒu)很(hěn)多(duō),比如(rú)說(shuō≈≤):
1.很(hěn)多(duō)人(rén)貪方便,更新資源∞✔←™時(shí)用(yòng)了(le)GET,因為♥λ♦(wèi)用(yòng)POST必須要(yào♣♦)到(dào)FORM(表單),這(zhè)樣會(hu≈≥≥≈ì)麻煩一(yī)點。
2.對(duì)資源的(de)增,删,改,查操作(zuò),其實"£€都(dōu)可(kě)以通(tōng)過GETλ<★≈/POST完成,不(bù)需要(yào)用(yòng)到(dà ✘♦"o)PUT和(hé)DELETE。
3.另外(wài)一(yī)個(gè)是(shì),★"≤早期的(de)WebMVC框架設計(jì)者們并沒有(yǒu)有♣'(yǒu)意識地(dì)将URL當作(zuò)抽象的(de)資源來(♥♦∏∞lái)看(kàn)待和(hé)設計(jì),所σ σ以導緻一(yī)個(gè)比較嚴重的(de)問(wèn)題是(shì)傳統♥&的(de)WebMVC框架基本上(shàng)都(dōu)隻支持GET和(hé∑₽)POST兩種HTTP方法,而不(bù)<≈支持PUT和(hé)DELETE方法。
*簡單解釋一(yī)下(xià)MVC:M↓ΩVC本來(lái)是(shì)存在于Desktop程序中的(de),M是(δ>£shì)指數(shù)據模型,V是(shì)<"指用(yòng)戶界面,C則是(shì)控制(zhì)器(qì)。使用(yò&ε∏"ng)MVC的(de)目的(de)是(shì)将M和(hé)V的(de±)實現(xiàn)代碼分(fēn)離(lí),從(có© "Ωng)而使同一(yī)個(gè)程序可(kě)以使用(yòng)不(bù)同的α≈ε(de)表現(xiàn)形式。
以上(shàng)3點典型地(dì)描述了(le)老(lǎo)一(yīγ≠)套的(de)風(fēng)格(沒有(yǒu)嚴格遵守HTTP規範),'α♥随著(zhe)架構的(de)發展,現(xiàn)在出現(xiàn)REST(↓₽RepresentationalStateTra♣γ nsfer),一(yī)套支持HTTP規範的(de)新風(fēng)格♣λ,這(zhè)裡(lǐ)不(bù)多(duō)說(shuō)了(l₽ e),可(kě)以參考《RESTfulWebServices》∑¶£©。
說(shuō)完原理(lǐ)性的(de)問(wèn)題,我們再從(±♠•cóng)表面現(xiàn)像上(shàng)面看(kàn)看(k•☆₩×àn)GET和(hé)POST的(de)區(qū)别:
1.GET請(qǐng)求的(de)數(sh≥♦εù)據會(huì)附在URL之後(就(jiù)是(shì)把數(♠♥λshù)據放(fàng)置在HTTP協議(yì)頭中),以?分(φ™fēn)割URL和(hé)傳輸數(shù)據,參¶$數(shù)之間(jiān)以&相(xiàng)連,如(rú):¶÷πΩlogin.action?name=hyddd&pas<←₹sword=idontknow&verifα♦φ y=%E4%BD%A0%E5%A5%BD。如(rú)∏×果數(shù)據是(shì)英文(wénσ≠σφ)字母/數(shù)字,原樣發送,如(rú)果是(sαφδhì)空(kōng)格,轉換為(wèi)+,★≠如(rú)果是(shì)中文(wén)/其他(tā)字符,則直×™接把字符串用(yòng)BASE64加密,得(£¥de)出如(rú):%E4%BD%A0%E5%A5%BD,其中%✔₹ΩXX中的(de)XX為(wèi)該符号以16進制(<♦zhì)表示的(de)ASCII。
POST把提交的(de)數(shù)據則放(fàng)置在是(shì✔¥♦♥)HTTP包的(de)包體(tǐ)中。
2."GET方式提交的(de)數$ε→¶(shù)據最多(duō)隻能(néng)是(shì)1024字≈§Ω節,理(lǐ)論上(shàng)POST£↔∞沒有(yǒu)限制(zhì),可(kě)傳較大(♣÷≈dà)量的(de)數(shù)據,IIS4中最大(dà)為(wèiε±§)80KB,IIS5中為(wèi)100KB"??!
以上(shàng)這(zhè)句是(shì÷™)我從(cóng)其他(tā)文(wén)章(zhāng)轉過來(lái)的("∑de),其實這(zhè)樣說(shuō)是(shì)錯(cuò)誤的(de),←不(bù)準确的(de):
(1).首先是(shì)"¶♠≈;GET方式提交的(de)數(shù)據最多™<(duō)隻能(néng)是(shì)1γα↑024字節",因為(wèi)GET是(shì)通(tōng)過URLγ€↑★提交數(shù)據,那(nà)麽GET可(₩★kě)提交的(de)數(shù)據量就(jiù)跟URL→♥的(de)長(cháng)度有(yǒu)直接關系αΩ§了(le)。
邯鄲網站(zhàn)建設告訴大(dà)家(jiā)而實際上(shàng),URL不(bù™ε>)存在參數(shù)上(shàng)限的(×∏de)問(wèn)題,HTTP協議(yì)規範沒₽→§有(yǒu)對(duì)URL長(cháng)度進行(xíng♣×♠λ)限制(zhì)。這(zhè)個(gè)限制(zhì)是(shì)特定✔ 的(de)浏覽器(qì)及服務器(qì)對(duì)它的(★₹$de)限制(zhì)。IE對(duì)URL長(cháng)度的(₽πde)限制(zhì)是(shì)2083∞∏→字節(2K+35)。對(duì)于其他(tā)浏覽器(qì),如(rú)Net♠$scape、FireFox等,理(lǐ)論上(s £©>hàng)沒有(yǒu)長(cháng)度限制(zhì),其限制(zhα¥<✔ì)取決于操作(zuò)系統的(de)支持。
注意這(zhè)是(shì)限制(zhì)是∑♠•(shì)整個(gè)URL長(cháng)度,而不(bù)僅僅是★→(shì)你(nǐ)的(de)參數(shù)值數(shù)據長(cháng)度$®♦。[見(jiàn)參考資料5]
(2).理(lǐ)論上(shàng)講,POST♣εφβ是(shì)沒有(yǒu)大(dà)小(xiǎo)限制(zhì)的♦(de),HTTP協議(yì)規範也(yě)沒有(yǒu)進行(xíng≥ε)大(dà)小(xiǎo)限制(zhì),說(shuō)“POλ±ST數(shù)據量存在80K/100K的(de♦<↕)大(dà)小(xiǎo)限制(zhì)”是(shì)不(bπ₽ù)準确的(de),POST數(shù)據是(shì)沒有(y∏>♥"ǒu)限制(zhì)的(de),起限制(zhì)作(zu✔₹ ò)用(yòng)的(de)是(shì)← 服務器(qì)的(de)處理(lǐ)程序的(de)£¥←™處理(lǐ)能(néng)力。