http請求,get請求和post請求體以及響應體
一、http請求
1.Http請求格式
Http請求即客戶端傳送給伺服器的請求。該請求的內容格式如下所示:
請求首行
請求頭資訊
空行
請求正文,也稱請求體
2.使用HttpWatch抓包工具
請求資訊詳細內容如下:
GET /Example03/ 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=9E0C4BDEAFD1EB2B1060D69C3B96F72D
(1)首先分析其請求首行:GET /Example03/ HTTP/1.1
GET :指的是請求方式。
/Example03 :指的是請求地址,即URL。
HTTP/1.1 :指的是協議及版本號。
(2)接著分析請求頭資訊,由以上請求頭資訊可知,請求頭資訊的格式如下所示:
l請求頭名稱
冒號
請求頭值
現在我們來一一分析這些請求頭,理解它們的作用:
Accept :告訴伺服器當前瀏覽器支援的MIME型別。
Accept-Language :告訴伺服器當前瀏覽器支援的語言環境,這裡的值是en-US,zh-CN。enà表示英文,USà表示美國,zhà表示中文,CNà表示中國。
User-Agent :表示當前瀏覽器的型別和
Accept-Encoding :當前瀏覽器支援的資料壓縮格式,有時候伺服器給瀏覽器傳送的東西很大,這時候伺服器就要考慮當資料被壓縮後,瀏覽器能不能給解壓出來,那麼這個請求頭就是瀏覽器告訴伺服器它能夠解壓的格式。
Host :瀏覽器請求的主機名和埠號,在這裡它請求的主機是localhost,雖然後面沒有顯示埠號,但是你要知道這個埠號是80,它是http協議預設的埠號。
Connection :連線的方式,Keep-Alive表示的意思是連線一會。
Cookie :這是一個與cookie相關的請求頭。
(3)請求資訊中的空行,處於請求頭和請求正文之間。
(4)以上請求資訊中沒有請求正文,是因為該請求方式是GET請求,而GET方式的請求資訊中是沒有請求正文的,我們接下來要學習POST請求有請求正文。後面我們會詳細介紹請求正文。
二、http的get和post請求
在HTTP請求訊息中,請求方式有GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT和CONNECT八種。而在以後們最常用的有兩種請求方式:POST請求、GET請求。這兩種請求方式所對應的請求協議內容略有不同,在上面中,我們已經瞭解了GET請求方式的請求資訊,下面是Post請求。
1.POST請求
我們在瀏覽器位址列上直接輸入網址訪問資源,這種請求方式是GET請求,超連結請求也屬於GET請求,下面我們要演示的是POST請求:
(1) 建立一個web應用,名稱為Example04,並在該應用中的WebRoot目錄下新建一個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>
(2) 將Example04釋出到Tomcat中,啟動Tomcat伺服器。在瀏覽器端位址列上輸入http://localhost:8080/Example04/form.html,並使用HttpWatch進行抓包。
(3) 在使用者名稱文字框中輸入:zhangsan,密碼文字框中輸入:123。再點選【提交】按鈕。
(4)我們通過HttpWatch成功的抓取到form表單提交之後的請求資訊。
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)現在我們再抓取一段GET方式請求資訊,在瀏覽器位址列上輸入:http://localhost:8080/Example04?username=zhangsan&password=123
(6)get請求資訊
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
將post方式請求資訊與get方式請求資訊進行比較,有以下兩點區別:
1.請求首行區別:請求引數的位置不同
以上兩種請求方式都是帶引數的請求,POST請求首行是:POST /Example04/index.jsp HTTP/1.1,GET請求首行為: GET /Example04?username=zhangsan&password=123 HTTP/1.1,其中GET請求首行中,”?”後面的是請求引數,多個請求引數之間用”&”連線。可以看出,POST請求的請求引數並不在請求首行中。
2.GET請求沒有請求體,POST請求有請求體
GET請求沒有請求體。從例1-2可以看出,POST請求有請求體,而且請求體的內容是從form.html頁面提交過來的引數。這些引數的格式:引數名=引數值&引數名=引數值&…,get請求沒有請求體,它的請求引數附加在請求首行的url後面。
三、http的響應
1.什麼是HTTP響應
當伺服器收到瀏覽器的請求後,會發送響應訊息給瀏覽器。一個完整的響應訊息主要包括響應首行、響應頭資訊、空行和響應正文。其中,每個部分都代表了不同的含義。下面我們會圍繞HTTP響應訊息的每個組成部分進行詳細分析。
2.HTTP響應訊息分析
下面我們通過HttpWatch抓包工具,抓取一段響應資訊,然後對該資訊進行分析。
(1)建立web應用Example05,將該應用釋出到Tomcat伺服器,啟動Tomcat伺服器。在瀏覽器位址列輸入http://localhost:8080/Example05/index.jsp。使用HttpWatch進行抓包,抓取的響應訊息
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 624
Date: Mon, 03 Nov 2014 06:37:28 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://localhost:8080/Example05/">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
</body>
</html>
由響應訊息內容,分析可知:
(1)響應首行:其內容是”HTTP/1.1 200 OK”
HTTP/1.1 :表示協議版本
200 :表示響應狀態碼,200表示響應成功。
OK :表示響應成功,對響應狀態碼的解釋。
(2)響應頭資訊:類似於請求訊息中的請求頭,其格式和請求頭資訊格式一樣,即響應頭:響應頭值。
Server響應頭 :該響應頭是伺服器告訴瀏覽器,當前響應的服務型別和版本。
Content-Type響應頭 :伺服器告訴瀏覽器響應內容是什麼型別,以及採用的是什麼字元編碼。該響應頭的值現在為:text/html;charset=utf-8。說明響應資訊的型別是文字型別中的html,使用的字元編碼是utf-8。
Content-Length響應頭 :伺服器告訴瀏覽器,響應內容的長度,該響應內容的長度現在是624個位元組。
Date響應頭 :表示是伺服器是在什麼時候響應回瀏覽器,注意這裡的時間是按照美國時間來計算。
(3)空行:響應頭和響應體由空行連線。
(4)響應體:該響應訊息的響應體是一個html文件。瀏覽器可以直接識別這個html檔案。而我們訪問的是一個jsp檔案,響應回去的是一個html檔案。說明伺服器將該jsp翻譯成了一個html,然後再響應給瀏覽器。