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