1. 程式人生 > >初識HTTP協議--請求與響應報文

初識HTTP協議--請求與響應報文

HTTP相信大家都知道這個詞,我們也都知道它是要幹嘛的,以前的我也一直只是知道它就是基於TCP/IP協議為瀏覽器和伺服器提供的一個通訊協議標準,可以是GET、POST方式,可以通過telnet的方法 來發送一個HTTP請求並得到返回的內容,預設埠是80啊等等。最近也不知道出於什麼原因,突然就想了解它的內部協議構造了,網上找了點資料,並動手去檢視研究研究它。

      概念啥的就不去理會了;既然HTTP是基於TCP/IP的那麼我們先看看TCP/IP協議又是怎麼回事?

      在OSI的七層模型中,TCP是在傳輸層中,而IP則在網路層。而在OSI的各層中層與層之間是相互獨立又相互依靠的,上層依賴於下層,下層又為上層提供服務,所以你應該知道了TCP/IP的關係和作用了。(下面2張圖都是網上找的)



一、HTTP協議的歷史(網上找的歷史,具體歷史我也不知道,HTTP產生的時候我還沒出生呢!)

u   HTTP/0.9: 從1990年就已經用來作為WWW的傳輸協      議,當時非常簡單,只支援GET方法,響應中攜帶      的訊息必須HTML檔案。

u   HTTP/1.0

: 1996釋出RFC1945,90年後,基於0.9的    各種客戶端和服務端的擴充套件層出不窮,把這些擴

      展進行綜合推出新標準HTTP/1.0 。

u   HTTP/1.1: 1997推出RFC2068,HTTP/1.1的標準。

u   HTTP/1.1: 1999推出RFC2616,廢棄了RFC2068標準。

二、HTTP協議的基礎內容

http協議的訊息型別分為2中型別:一種是請求(Request)訊息:由客戶端發給伺服器的訊息。 

                                                  另一種是響應(Response)訊息:是服務端回覆客戶端請求的訊息。  

     看下面2張圖片看看個返回的都是什麼資料:

這是請求訊息:

 

這個是響應訊息:


      我們看看具體每行都是幹啥用的?

     我們先看看請求訊息的組成:

  這就是一個請求報文,響應報文是對應的 

對照上面的你就可以清楚看出來了

 

  相對的你可以對應這張圖片看下:

1、請求報文詳解:

接下來就分析下:上面我們剛才得到那份請求訊息:

GET /ex/CookieAutoLogin.aspx HTTP/1.1  :

               表示向伺服器用GET方式請求/ex/CookieAutoLogin.aspx檔案,使用HTTP/1.1協議。

Accept: text/html, application/xhtml+xml, */*

              表示我當前瀏覽器可以接收的MIME檔案格式。可以根據它判斷並返回適當的檔案格式。

Accept-Language: zh-CN 

              表示當前瀏覽器支援的語言,中文;很多國際網站預設進入的語言都是通過這個實現的。

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

              表示客戶端瀏覽器名稱、型別、版本等。

Accept-Encoding: gzip, deflate

                表示我當前瀏覽器支援gzip、deflate兩種壓縮演算法。

Host: localhost:12478

                表示對應請求網址URL中的Web名稱和埠號。

Connection Keep-Alive:

                     Keep-Alive是永久連線(其實應該是長連線,這時候伺服器傳送了響應報文之後不直接關閉套接字,而是保持連線一段時間看看還有沒有其他請求,如果有請求,這樣不僅節省了建立新套接字的時間,還可以節約網路流量和)而如果是close則是在告知伺服器本瀏覽器不想使用永久連線方式(HTTP/1.0使用非永久連線,HTTP/1.1預設使用永久連線)。

Cookie: username=1; pwd=123

               這是瀏覽器向伺服器傳送和當前網站關聯的Cookie,這樣在伺服器端也能讀取瀏覽器端的Cookie了。

請求方法的解釋:

GET:獲取一個URL指定的資源,即資源實體

HEAD:獲取一個指定資源的資訊,

POST:向伺服器提交資料

PUT:向伺服器提交資源

DELETE請求源伺服器刪除Request-URI標識的資源

TRACE網路跟蹤

CONNECT與PROXY之間的連線管理

OPTIONS查詢能力

還有其他的一些資訊可以檢視部落格園的

 1、響應報文詳解:

再來分析響應報文資訊:

HTTP/1.1 302 Found 

           響應行:使用HTTP1.1協議,返回的狀態碼。具體常見狀態嗎見後面。(302是隻重定向)

Server: ASP.NET Development Server/10.0.0.0

           表示伺服器的型別,這是使用VS開發自啟動的小伺服器,10版本。

Date: Wed, 16 May 2012 05:46:46 GMT

             這個你一看就知道是啥了,(時間)。

X-AspNet-Version: 2.0.50727       這個是伺服器使用的.NET版本資訊。

Location: /ex/Default.aspx      重定向到哪個頁面。

Cache-Control: private            快取控制:私有。

Content-Type: text/html; charset=utf-8        表示返回資料的型別 

Content-Length: 137                表示返回的位元組長度。

          這個要知道這是後續資料訊息體的長度,響應報文頭不包括在內,響應報文頭只是描述,返回的具體資料(比如HTML文字、圖片資料等)。

 Connection: Close             連線狀態:關閉。

下面這些就是返回的具體訊息了。(上面的長度也指代的是這個的長度。)

<html><head><title>Object moved</title></head><body>

<h2>Object moved to <a href="%2fex%2fDefault.aspx">here</a>.</h2>

</body></html>

響應行中的響應狀態

1xx:指示資訊--表示請求已接收,繼續處理。

2xx:成功--表示請求已被成功接收、理解、接受。

3xx:重定向--要完成請求必須進行更進一步的操作。

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現。

5xx:伺服器端錯誤--伺服器未能實現合法的請求。

常見狀態程式碼、狀態描述的說明如下

200 OK:客戶端請求成功。

400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解。

401 Unauthorized:請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用。

403 Forbidden:伺服器收到請求,但是拒絕提供服務。

404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。

500 Internal Server Error:伺服器發生不可預期的錯誤。

503 Server Unavailable:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常,舉個例子:HTTP/1.1 200 OK(CRLF)。