??? ??? Web 上最常用的兩種 Http 請(qǐng)求就是 Get 請(qǐng)求和 Post 請(qǐng)求了。我們?cè)谧?/font> java web 開發(fā)時(shí),也總會(huì)在 servlet 中通過 doGet 和 doPost 方法來處理請(qǐng)求;更經(jīng)常地,我們會(huì)在 doGet 方法的實(shí)現(xiàn)中調(diào)用 doPost 方法。盡管做了近兩年的 web 開發(fā),我對(duì)諸如 Get 請(qǐng)求和 Post 請(qǐng)求的基本概念仍不是十分了解。近日閱讀《 javascript 高級(jí)程序設(shè)計(jì)》(很長時(shí)間沒有看書了!),重新整理了一下 Get 請(qǐng)求和 Post 請(qǐng)求的概念,算是讀書筆記吧。
??? ??? Get 是從服務(wù)器上獲取數(shù)據(jù),這是最常見的請(qǐng)求類型。每次在瀏覽器中輸入 URL 打開頁面時(shí),就是向服務(wù)器發(fā)送一個(gè) Get 請(qǐng)求。 Get 請(qǐng)求的參數(shù)是用問號(hào)追加到 URL 結(jié)尾,后面跟著用&連接起來的名稱/值對(duì)。比如網(wǎng)址 http://bt.neupioneer.com/viewthread.php?tid=87813 ,其中 tid 為參數(shù)名, 87813 為參數(shù)的值。在編程中,使用 Get 最多的地方就是超鏈接列表,其中的參數(shù)多是從數(shù)據(jù)庫讀出的字段拼接而成。在 Ajax 中,我們也經(jīng)常使用 Get ,通過提取出頁面的標(biāo)簽值,拼成串后構(gòu)造一個(gè) URL 。 Get 在使用上是有限制的, URL 的最大長度為 2KB ,因此,如果表單中包含textarea這樣的大文本段,就不要用Get了。對(duì)于表單來說, Get 是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的 ACTION 屬性所指的 URL 中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),通過 URL 可以看到中傳遞的參數(shù)。因此,相比于 Post ,它是不安全的。
??? ??? Post 的使用場(chǎng)合多是在表單提交的地方,因?yàn)楹?/font> Get 相比, Post 可以發(fā)送更多的數(shù)據(jù),《 javascript 高級(jí)程序設(shè)計(jì)》中說最多可以發(fā)送 2GB ,這多少讓我不太相信,網(wǎng)上一些文章說 IIS4 中最大量為 80KB , IIS5 中為 100KB ,不知道 Tomcat 中的情況如何。 Post 是通過 HTTP Post 機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在 HTML Header 內(nèi)一起傳送到 ACTION 屬性所指的 URL 地址。 和 Get 相比, Post 的內(nèi)容是不會(huì)在 URL 中顯現(xiàn)出來的,這多少是安全一些的。 我在做登錄這樣的表單時(shí),只是將請(qǐng)求方式設(shè)為 Post ,使得用戶名和密碼信息不在瀏覽器中顯現(xiàn),但不清楚的是,是否有更好的方法加密密碼等信息(實(shí)在不知道如果請(qǐng)求不傳到服務(wù)器的話,怎么對(duì)未知的請(qǐng)求加密,清楚的朋友不妨給個(gè)解決方案)。在 Ajax 中,如果要和服務(wù)器交互,記得加上 request.setRequestHeader(“Content-Type”,”application/x-www-urlencoded”); 這一腳本,盡管很多 Ajax 教材中都提到了這一點(diǎn)。另外要說的是,被傳遞的參數(shù)是要經(jīng)過編碼的。在 javascript 中,編碼函數(shù)是 encodeURIComponent(xx) 。