新手入門:瞭解WWW服務與HTTP協議(一)
歷史上,先後問世了多個具有重大社會影響的電子通訊技術。第一個這樣的技術是19世紀70年代發明的電話。電話使得不在同一物理位置的兩人得以實時
地口頭交流。它對社會有重大的影響——有好的也有壞的。下一個電子通訊技術是20世紀20年代及30年代問世的廣播收音機/電視機。廣播收音機/電視機使
得人們能收聽收視大量的音訊和視訊資訊。它對社會同樣有重大的影響——有好的也有壞的。改變了人們的生活與工作方式的第三個重大通訊技術是web。web
最吸引使用者的也許是它的隨選(on
demand)操作性。使用者只在想要時收到所要的東西。這一點不同於廣播收音機/電視機。廣播收音機/電視機的使用者是在其內容供應商播出內容期間被迫收聽
收視。除了隨選操作性,Web還有許多大家喜愛的其他精彩特性。任何個人都可以極其容易地在Web上公佈任何資訊;任何人都可能以極低的成本成為發行人。
超連結和搜尋引擎幫助我們在Web站點的海洋中導航。圖形和動畫刺激著我們的感官。表單、
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.yesky.com/urlpath/picture.qif
www.yesky.com是一個主機名,/urlpath/picture.qif是一個路徑名。瀏覽器是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伺服器“對話”。
圖1 HTTP請求與響應行為
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)。