在HTTP請(qǐng)求消息中,請(qǐng)求方式有GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT和CONNECT八種。而在以后們最常用的有兩種請(qǐng)求方式:POST請(qǐng)求、GET請(qǐng)求。這兩種請(qǐng)求方式所對(duì)應(yīng)的請(qǐng)求協(xié)議內(nèi)容略有不同,在上一節(jié)的
HTTP請(qǐng)求協(xié)議中,我們已經(jīng)了解了GET請(qǐng)求方式的請(qǐng)求信息,下面我們來(lái)學(xué)習(xí)Post請(qǐng)求。
1.POST請(qǐng)求
我們?cè)跒g覽器地址欄上直接輸入網(wǎng)址訪問(wèn)資源,這種請(qǐng)求方式是GET請(qǐng)求,超鏈接請(qǐng)求也屬于GET請(qǐng)求,下面我們要演示的是POST請(qǐng)求:
- 創(chuàng)建一個(gè)web應(yīng)用,名稱為Example04,并在該應(yīng)用中的WebRoot目錄下新建一個(gè)form.html文件。詳情請(qǐng)見Post請(qǐng)求案例詳解。點(diǎn)擊此處 下載Examplie04。主要代碼如例1-1所示:
例1-1 form.html
<form action="/Example04/index.jsp" method="post">
用戶名:<input type="text" name="username"/></br>
密碼:<input type="password" name="password"/></br>
<input type="submit" value="提交"/>
</form>
- 將Example04發(fā)布到Tomcat中,啟動(dòng)Tomcat服務(wù)器。在瀏覽器端地址欄上輸入http://localhost:8080/Example04/form.html,并使用HttpWatch進(jìn)行抓包,如圖1-1所示:
圖1-1 訪問(wèn)form.html
- 如圖1-1所示,在用戶名文本框中輸入:zhangsan,密碼文本框中輸入:123。然后選中【Clear】選項(xiàng),再點(diǎn)擊【提交】按鈕,結(jié)果如圖1-2所示:
圖1-2 運(yùn)行結(jié)果
(4)如圖1-2所示,我們通過(guò)HttpWatch成功的抓取到form表單提交之后的請(qǐng)求信息,具體內(nèi)容如例1-2所示:
例1-2 post方式請(qǐng)求信息
POST /Example04/index.jsp HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Referer: http://localhost:8080/Example04/form.html
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
username=zhangsan&password=123
(5)現(xiàn)在我們?cè)僮ト∫欢蜧ET方式請(qǐng)求信息,在瀏覽器地址欄上輸入:http://localhost:8080/Example04?username=zhangsan&password=123,如圖1-3所示:
圖1-3 get請(qǐng)求
(6)圖1-3所示中的請(qǐng)求信息,如例1-3所示:
例1-3 get方式請(qǐng)求信息
GET /Example04?username=zhangsan&password=123 HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=5386A9443729D7EB0B61E38A9C7CF52F
將例1-2 post方式請(qǐng)求信息與例1-3 get方式請(qǐng)求信息進(jìn)行比較,有以下兩點(diǎn)區(qū)別:
- 請(qǐng)求首行區(qū)別:請(qǐng)求參數(shù)的位置不同
以上兩種請(qǐng)求方式都是帶參數(shù)的請(qǐng)求,POST請(qǐng)求首行是:POST /Example04/index.jsp HTTP/1.1,GET請(qǐng)求首行為: GET /Example04?username=zhangsan&password=123 HTTP/1.1,其中GET請(qǐng)求首行中,”?”后面的是請(qǐng)求參數(shù),多個(gè)請(qǐng)求參數(shù)之間用”&”連接??梢钥闯?,POST請(qǐng)求的請(qǐng)求參數(shù)并不在請(qǐng)求首行中。
- GET請(qǐng)求沒(méi)有請(qǐng)求體,POST請(qǐng)求有請(qǐng)求體
從例1-3中可以看出,GET請(qǐng)求沒(méi)有請(qǐng)求體。從例1-2可以看出,POST請(qǐng)求有請(qǐng)求體,而且請(qǐng)求體的內(nèi)容是從form.html頁(yè)面提交過(guò)來(lái)的參數(shù)。這些參數(shù)的格式:參數(shù)名=參數(shù)值&參數(shù)名=參數(shù)值&…,get請(qǐng)求沒(méi)有請(qǐng)求體,它的請(qǐng)求參數(shù)附加在請(qǐng)求首行的url后面。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.fskzgqt.cn/javaee