天天看點

WWW之HTTP協定分析

1.WWW簡介

在現在的網絡體系結構中,最底層的實體層,自下而上分别是資料鍊路層,網絡層和傳輸層。資料鍊路層的規範最常見的是以太網,網絡層是IP,傳輸層是TCP和UDP協定,最上面一層是應用層。應用層的協定包括FTP,HTTP等等。下面的這個圖就說明了目前網絡的架構(在這個圖中,對于實體層和資料鍊路層的抽象程度比較高,但是沒有關系,我們主要的目标是在L3,L4和L5上):

WWW之HTTP協定分析

應用層和傳輸層之間的接口是SOCKET。在本文中,我們主要将精力放在HTTP中。我們通常所講的WWW(World Wide Web)的含義是指一種采用Client/Server架構的分布式系統。Client通過浏覽器(Browser)來通路Server。Server則擁有大量的檔案供Client,這些檔案采用Web Page的方式呈現給Client。下圖所示就是client和server之間通信的方式。

WWW之HTTP協定分析
WWW之HTTP協定分析

在這裡簡要的提一下超文本和超媒體的概念,超文本(HyperText)和HyperMedia是指在檔案中存在指向其他檔案的連接配接的檔案。接下來在簡要的介紹一個我們通常所使用的浏覽器的結構。浏覽器通常包括protocols、controler以及interpreters三個組成部分。protocols是指浏覽器支援的協定,controller顧名思義是控制端,比如你按下了一個按鈕,interpreters是指浏覽器對來自伺服器的檔案的解釋器,現在最常用的是HTML,JavaScript以及Java。下圖就是浏覽器通常采用的架構。

WWW之HTTP協定分析
WWW之HTTP協定分析

我們通常在浏覽器的指令行敲進的東西(比如www.xiaonei.com)叫做URL。URL是擷取伺服器上資源的指針,通過URL就可以定位到伺服器上的資源。URL通常采用以下的格式

WWW之HTTP協定分析
WWW之HTTP協定分析

protocol是指的擷取資源采用的協定,比如TELNET, FTP HTTP等。host是指伺服器的域名(請查閱DNS),端口是指伺服器提供某項伺服器指定的通路端口比如80,path是指資源在伺服器上的路徑。port是可選的。

存儲在伺服器上的檔案分為三類,靜态檔案(static document)、動态檔案(Dynamic documents)以及主動檔案(Active documents)。靜态檔案是指的檔案是“不變的”,例如某一張圖檔,靜态檔案通過HTML,XML,XHTML以及XLS等語言描述。動态檔案時伺服器在接收用戶端的請求參數之後動态生成的。假如動态檔案的所有部分都重新生産則是低效率的,因為檔案的,某些部分是靜态的。于是一些script語言變誕生了,scripts嵌入在HTML等靜态檔案中,伺服器隻需要運作這些scripts片段就可以了。最常用的scripts包括Hypertext Preprocessor (PHP), which uses the Perl language; Java Server Pages (JSP), which uses the Java language for scripting; Active Server Pages (ASP), a Microsoft product。主動檔案是指有時候用戶端一側需要運作一些程式來達到某些目的(比如非常不錯的畫面),則伺服器在傳回給用戶端的HTML檔案中可以嵌入Java Applet或者JavaScript的片段。然後有用戶端的浏覽器運作則效果便産生了。

2. HTTP協定

HTTP協定是使用TCP的一種協定,在伺服器端通過80端口傳輸。HTTP消息分為Request和Response兩種。HTTP 通信的方式:

WWW之HTTP協定分析

其中Request消息的格式是:

WWW之HTTP協定分析

第一行成為Request line,包括Method、空格sp、通路server的URL、HTTP版本,以及回車(CR)和換行(FL)組成。其中Method字段比較重要,其具體含義如下圖所示:

WWW之HTTP協定分析

個人認為該表格中的PUT錯了,應該是sends a document from the client to server,具體參考件HTTP RFC。接下來就是HTTP的header lines了:

WWW之HTTP協定分析

最後就是HTTP body了,裡面才是資料。資料的大小可以通過IP包的長度減去ip頭的長度(通常20位元組)以及TCP頭長度以及HTTP頭長度來獲得。

HTTP Response的格式和HTTP Request類似。如下圖所示:

WWW之HTTP協定分析

Status line 包括HTTP版本号 空格 狀态字 空格 Phrase是對狀态字Status的文本解釋。然後是回車和換行。

Status code以及Phrase如下圖所示:

WWW之HTTP協定分析

HTTP Response header names 及其意義如圖所示:

WWW之HTTP協定分析

最後是HTTP Response 的body,其大小可以采用相同的方式獲得。

WWW之HTTP協定分析

參考文獻

[1] Hypertext Transfer Protocol-HTTP1.1:http://www.w3.org/Protocols/rfc2616/rfc2616.html

[2] TCP/IP Protocol Suite by Foruzan

WWW之HTTP協定分析