HTTP 定義了與服務(wù)器交互的不同方法寻拂,最基本的方法是 GET 和 POST程奠。Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請求兜喻,在FORM(表單)中梦染,Method默認(rèn)為"GET"赡麦,實(shí)質(zhì)上朴皆,GET和POST只是發(fā)送機(jī)制不同帕识,并不是一個取一個發(fā)!
1.安全性
a. 僅是指是非修改信息時
GET 請求一般不應(yīng)產(chǎn)生副作用遂铡。就是說肮疗,它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣扒接,不會修改伪货,增加數(shù)據(jù),不會影響資源的狀態(tài)钾怔。
POST 表示可能改變服務(wù)器上的資源的請求
b. 指真正的Security的含義時
通過GET提交數(shù)據(jù)碱呼,用戶名和密碼將明文出現(xiàn)在URL上,因?yàn)椋?1)登錄頁面有可能被瀏覽器緩存宗侦,(2)其他人查看瀏覽器的歷史紀(jì)錄愚臀,那么別人就可以拿到你的賬號和密碼了,除此之外矾利,使用GET提交數(shù)據(jù)還可能會造成Cross-site request forgery攻擊姑裂。
此時POST的安全性要比GET的安全性高。
2.提交數(shù)據(jù)
- 對于get方式男旗,服務(wù)器端用Request.QueryString獲取變量的值舶斧,對于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)察皇。
- GET是通過URL提交數(shù)據(jù)茴厉,那么GET可提交的數(shù)據(jù)量就跟URL的長度有直接關(guān)系了。實(shí)際上什荣,URL不存在參數(shù)上限的問題呀忧,HTTP協(xié)議規(guī)范沒有對URL長度進(jìn)行限制。這個限制是特定的瀏覽器及服務(wù)器對它的限制溃睹。
- 理論上講而账,POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進(jìn)行大小限制因篇,說“POST數(shù)據(jù)量存在80K/100K的大小限制”是不準(zhǔn)確的泞辐,POST數(shù)據(jù)是沒有限制的,起限制作用的是服務(wù)器的處理程序的處理能力竞滓。
- 延伸出去咐吼,對于IIS 6.0,微軟出于安全考慮商佑,加大了限制锯茄。我們還需要注意:
1).IIS 6.0默認(rèn)ASP POST數(shù)據(jù)量最大為200KB,每個表單域限制是100KB。
2).IIS 6.0默認(rèn)上傳文件的最大大小是4MB肌幽。
3).IIS 6.0默認(rèn)最大請求頭是16KB晚碾。
IIS 6.0之前沒有這些限制。
3.使用情況
1.很多人貪方便喂急,更新資源時用了GET格嘁,因?yàn)橛肞OST必須要到FORM(表單),這樣會麻煩一點(diǎn)廊移。
2.對資源的增糕簿,刪,改狡孔,查操作懂诗,其實(shí)都可以通過GET/POST完成,不需要用到PUT和DELETE苗膝。
3.另外一個是响禽,早期的Web MVC框架設(shè)計(jì)者們并沒有有意識地將URL當(dāng)作抽象的資源來看待和設(shè)計(jì),所以導(dǎo)致一個比較嚴(yán)重的問題是傳統(tǒng)的Web MVC框架基本上都只支持GET和POST兩種HTTP方法荚醒,而不支持PUT和DELETE方法芋类。
以上3點(diǎn)典型地描述了老一套的風(fēng)格(沒有嚴(yán)格遵守HTTP規(guī)范),隨著架構(gòu)的發(fā)展界阁,現(xiàn)在出現(xiàn)REST(Representational State Transfer)侯繁,一套支持HTTP規(guī)范的新風(fēng)格