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