1. 程式人生 > >WWW之HTTP協議分析

WWW之HTTP協議分析

1.WWW簡介

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

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



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



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



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 通訊的方式:


其中Request訊息的格式是:


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


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


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

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


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

Status code以及Phrase如下圖所示:


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


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


參考文獻

[2] TCP/IP Protocol Suite by Foruzan