超文件傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡傳輸協議。所有的WWW文件都必須遵守這個標准。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。 目前的應用主要除了HTML網頁外還被用來傳輸超文本數據 例如:圖片、音頻文件(MP3等)、視頻文件(rm、avi等)、壓縮包(zip、rar等)基本上只要是文件數據均可以利用HTTP進行傳輸。
Web的應用層協議HTTP是Web的核心。HTTP在Web的客戶程序和服務器程序中得以實現。運行在不同端系統上的客戶程序和服務器程序通過交換HTTP消息彼此交流。HTTP定義這些消息的結構以及客戶和服務器如何交換這些消息。在詳細解釋HTTP之前,我們先來回顧一些web中的術語。
Web頁面(web page,也稱為文檔)由多個對象構成。對象(object)僅僅是可由單個URL尋址的文件,例如HTML文件、JPG圖像、GIF圖像、JAVA小應用程序、語音片段等。大多數Web頁面由單個基本HIML文件和若干個所引用的對象構成。例如,如果一個Web頁面包含HTML文本和5個JPEG圖像,那麼它由6個對象構成,即基本H1ML文件加5個圖像。基本HTML文件使用相應的URL來引用本頁面的其他對象。每個URL由存放該對象的服務器主機名和該對象的路徑名兩部分構成。例如,在如下的URL中:
www.45it.com/skin/new/logo.gif
www.45it.com是一個路徑名。浏覽器是web的用戶代理,它顯示所請求的Web頁面,並提供大量的導航與配置特性。Web浏覽器還實現HTTP的客戶端,因此在web上下文中,我們會從進程意義上互換使用浏覽器和客戶兩詞。流行的Web浏覽器有Netscape Communicator,firefox和微軟的IE等。Web服務器存放可由URL尋址的Web對象。web服務器還實現HTTP的服務器端。流行的Web服務器有Apache、微軟的IIS以及Netscape Enterprise Server。Netcraft提供了web服務器的概要剖析[Netcrft 2000]。
HTTP定義Web客戶(即浏覽器)如何從web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶。下圖展示了這種請求響應行為。當用戶請求一個Web頁面(譬如說點擊某個超鏈接)時,浏覽器把請求該頁面中各個對象的HTTP請求消息發送給服務器。服務器收到請求後,以運送含有這些對象HTTP響應消息作為響應。到1997年底,基本上所有的浏覽器和Web服務器軟件都實現了在RFC 1945中定義的HTTP/1.0版本。1998年初,一些Web服務器軟件和浏覽器軟件開始實現在RFC 2616中定義的HTTP/1.1版本。H1TP/1.1與HTTP/1.0後向兼容;運行1.1版本的web服務器可以與運行1.0版本的浏覽器對話,運行1.1版本的浏覽器也可以與運行1.0版本的Web服務器對話。
HTTP/1.0和HTTP/1.1都把TCP作為底層的傳輸協議。HTTP客戶首先發起建立與服務器TCP連接。一旦建立連接,浏覽器進程和服務器進程就可以通過各自的套接字來訪問TCP。如前所述,客戶端套接字是客戶進程和TCP連接之間的門,服務器端套接字是服務器進程和同一TCP連接之間的門。客戶往自己的套接字發送HTTP請求消息,也從自己的套接字接收HTTP響應消息。類似地,服務器從自己的套接字接收HTTP請求消息,也往自己的套接字發送HTTP響應消息。客戶或服務器一旦把某個消息送入各自的套接字,這個消息就完全落入TCP的控制之中。TCP給HTTP提供一個可靠的數據傳輸服務;這意味著由客戶發出的每個HTTP請求消息最終將無損地到達服務器,由服務器發出的每個HTTP響應消息最終也將無損地到達客戶。我們可從中看到分層網絡體系結構的一個明顯優勢HTTP不必擔心數據會丟失,也無需關心TCP如何從數據的丟失和錯序中恢復出來的細節。這些是TCP和協議棧中更低協議層的任務。
TCP還使用一個擁塞控制機制。該機制迫使每個新的TCP連接一開始以相對緩慢的速率傳輸數據,然而只要網絡不擁塞,每個連接可以迅速上升到相對較高的速率。這個慢速傳輸的初始階段稱為緩啟動(slow start)。
需要注意的是,在向客戶發送所請求文件的同時,服務器並沒有存儲關於該客戶的任何狀態信息。即便某個客戶在幾秒鐘內再次請求同一個對象,服務器也不會響應說:自己剛剛給它發送了這個對象。相反,服務器重新發送這個對象,因為它已經徹底忘記早先做過什麼。既然HTTP服務器不維護客戶的狀態信息,我們於是說HTTP是一個無狀態的協議(stateless protocol)。