如果表單處理服務(wù)器既支持POST方法又支持GET方法,那么你該選擇哪種方法呢?下面是有關(guān)這方面的一些規(guī)律:
如果想獲得最佳表單傳輸性能,可以采用GET方法來發(fā)送只有少數(shù)簡短字段的小表單。
一些服務(wù)器操作系統(tǒng)在處理可以立即傳遞給應(yīng)用程序的命令行參數(shù)時,會限制其數(shù)目和長度,在這種情況下,對那些有許多字段或是有很長的文本域的表單來說,就應(yīng)該采用POST方法來發(fā)送。
如果你在編寫服務(wù)器端的表單處理應(yīng)用程序方面經(jīng)驗不足,應(yīng)該選擇GET方法。如果采用POST方法,就要在讀取和解碼方面做些額外的工作,也許這并不很難,但是也許你不太愿意去處理這些問題。
如果安全性是個問題,那么我們建議選用POST方法。GET方法將表單參數(shù)直接放在應(yīng)用程序的URL中,這樣網(wǎng)絡(luò)窺探者可以很輕易地捕獲它們,還可以從服務(wù)器的日志文件中進行摘錄。如果參數(shù)中包含了信用卡賬號這樣的敏感信息,就會在不知不覺中危及用戶的安全。而POST應(yīng)用程序就沒有安全方面的漏洞,在將參數(shù)作為單獨的事務(wù)傳輸給服務(wù)器進行處理時,至少還可以采用加密的方法。
如果想在表單之外調(diào)用服務(wù)器端的應(yīng)用程序,而且包括向其傳遞參數(shù)的過程,就要采用GET方法,因為該方法允許把表單這樣的參數(shù)包括進來作為URL的一部分。而另一方面,使用POST樣式的應(yīng)用程序卻希望在URL后還能有一個來自瀏覽器額外的傳輸過程,其中傳輸?shù)膬?nèi)容不能作為傳統(tǒng)<a>標(biāo)簽的內(nèi)容。
全面比較HTTP GET與POST方法
1. 基本信息比較
屬性 |
GET方法 |
POST方法 |
歷史: |
通常使用GET方法發(fā)送的數(shù)據(jù)作為URL的一部分將會被瀏覽器保存起來 |
使用POST方法提交的數(shù)據(jù)則不會作為URL的一部分,當(dāng)然不會瀏覽器保存。 |
書簽: |
GET方法可能被瀏覽器當(dāng)作書簽(bookmark)保存 |
POST方法則不會 |
回退與重新提交: |
使用GET方法的頁面可以被回退并重新執(zhí)行而不通知用戶 |
POST方法會通知用戶再次提交 |
Form編碼類型: |
GET提交數(shù)據(jù)只支持 application/x-www-form-urlencoded |
POST支持application/x-www-form-urlencoded與multipart/form-data |
參數(shù): |
由于GET的參數(shù)一般都跟在URL后面,支持的數(shù)據(jù)大小一般在2K,有些服務(wù)器可以支持到64K。這個就是很多網(wǎng)頁超過64K就掛掉的真實原因。因為服務(wù)器限制了。 |
發(fā)送參數(shù),還可以是文件,大小在理論上沒有限制。 |
被攻擊: |
GET方法提交數(shù)據(jù)很容易被黑客攻擊,實施腳本綁架。 |
POST方法相對GET方法不是那么容易被黑客攻擊 |
數(shù)據(jù)類型限制: |
GET方法提交數(shù)據(jù)只能是文本數(shù)據(jù) |
POST方法則不受限制,二進制文件也可以。 |
安全性: |
GET方法的安全性比POST方法要低一些,原因是數(shù)據(jù)做為URL的一部分是可見的。而且被瀏覽器存在歷史訪問記錄中。 |
POST方法的安全性相對GET要高一些。因為參數(shù)數(shù)據(jù)不能被瀏覽器作為URL的一部分而存入歷史訪問記錄中。 |
表單數(shù)據(jù)長度: |
由于表單數(shù)據(jù)做為URL的一部分而URL長度通常是有限制的。 |
POST方法沒有限制。 |
可用性: |
GET方法通常不被用來發(fā)送密碼與敏感信息。但是我發(fā)現(xiàn)還是有不少網(wǎng)站用GET來實現(xiàn)login。比如XXXX社區(qū),它把login方法放在一個jquery完成JavaScript腳本中,用GET請求完成。 |
POST方法可以用來發(fā)送密碼與其他敏感信息。 |
可見性: |
GET方法對所有人可見 |
POST方法的變量是不可見的在URL中 |
緩存: |
GET方法默認(rèn)被緩存,這個就是很多時候用GET方法獲取數(shù)據(jù)后面要跟個時間戳的原因 |
POST方法默認(rèn)不被緩存。 除非Response頭設(shè)置了Cache-Control或者Expires屬性值。 |
最大的變量值: |
GET支持最大為7607個字符 |
POST方法支持最大值為8MB |
應(yīng)用場合: |
GET最常用的場合是獲取數(shù)據(jù),瀏覽器獲取網(wǎng)頁時候絕大多數(shù)通過GET方法實現(xiàn),大多數(shù)瀏覽器下載也是使用GET方法獲取文件 |
POST主要用來向服務(wù)器提交數(shù)據(jù)。 |