HTTP 消息結(jié)構(gòu)

HTTP是基于客戶端/服務(wù)端(C/S)的架構(gòu)模型,通過一個可靠的鏈接來交換信息,是一個無狀態(tài)的請求/響應(yīng)協(xié)議。

一個HTTP"客戶端"是一個應(yīng)用程序(Web瀏覽器或其他任何客戶端),通過連接到服務(wù)器達(dá)到向服務(wù)器發(fā)送一個或多個HTTP的請求的目的。

一個HTTP"服務(wù)器"同樣也是一個應(yīng)用程序(通常是一個Web服務(wù),如Apache Web服務(wù)器或IIS服務(wù)器等),通過接收客戶端的請求并向客戶端發(fā)送HTTP響應(yīng)數(shù)據(jù)。

HTTP使用統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers, URI)來傳輸數(shù)據(jù)和建立連接。

一旦建立連接后,數(shù)據(jù)消息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。


客戶端請求消息

客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個部分組成,下圖給出了請求報文的一般格式。

客戶端請求報文


服務(wù)器響應(yīng)消息

HTTP響應(yīng)也由四個部分組成,分別是:狀態(tài)行、消息報頭、空行和響應(yīng)正文。

服務(wù)器響應(yīng)



實例

下面實例是一點典型的使用GET來傳遞數(shù)據(jù)的實例:

客戶端請求:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

服務(wù)端響應(yīng):

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

輸出結(jié)果:

Hello World! My payload includes a trailing CRLF.