1. 程式人生 > >http請求,get請求和post請求體以及響應體

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-USzh-CNenà表示英文,USà表示美國,zhà表示中文,CNà表示中國。

User-Agent :表示當前瀏覽器的型別和

OS的型別,其中MSIE 8.0表示是ie瀏覽器,版本是8.0等。

Accept-Encoding :當前瀏覽器支援的資料壓縮格式,有時候伺服器給瀏覽器傳送的東西很大,這時候伺服器就要考慮當資料被壓縮後,瀏覽器能不能給解壓出來,那麼這個請求頭就是瀏覽器告訴伺服器它能夠解壓的格式。

Host :瀏覽器請求的主機名和埠號,在這裡它請求的主機是localhost,雖然後面沒有顯示埠號,但是你要知道這個埠號是80,它是http協議預設的埠號。

Connection :連線的方式,Keep-Alive表示的意思是連線一會。

Cookie :這是一個與cookie相關的請求頭。

(3)請求資訊中的空行,處於請求頭和請求正文之間。

(4)以上請求資訊中沒有請求正文,是因為該請求方式是GET請求,而GET方式的請求資訊中是沒有請求正文的,我們接下來要學習POST請求有請求正文。後面我們會詳細介紹請求正文。

二、http的get和post請求

HTTP請求訊息中,請求方式有GETPOSTHEADOPTIONSDELETETRACEPUTCONNECT八種。而在以後們最常用的有兩種請求方式: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.1GET請求首行為: 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,然後再響應給瀏覽器。