??? ??? 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)有看書了!),重新整理了一下
Get
請(qǐng)求和
Post
請(qǐng)求的概念,算是讀書筆記吧。
??? ??? 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)
。