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