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