Web的應用層協議是超文本傳輸協議(HyperTextTransferProtocol,HTTP),它是?Web的核心。HTTP由兩個程序實現:一個客戶程序和一個服務器程序。客戶程序和服務器程序運行在不同的端系統中,通過交換HTTP報文進行會話。HTTP定義了這些報文的結構以及客戶和服務器進行報文交換的方式。在詳細解釋HTTP之前,應當回顧某些Web術語。
Web頁面(Web page)(也叫文檔)是由對象組成的。一個對象(object)只是一個文件,諸如一個HTML文件、一個JPEG圖形,一個Java小程序或一個視頻片段這樣的文件,且它們可通過一個URL地址尋址。多數Web頁面含有一個HTML基本文件(base HTML file)以及幾個引用對象。例如,如果一個Web頁面包含HTML文本和5個JPEG圖形,那么這個Web頁面有6個對象 : 一個HTML基本文件加5個圖形。HTML基本文件通過對象的URL地址引用頁面中的其他對象。每個URL地址由兩部分組成 : 存放對象的服務器主機名和對象的路徑名。例如,URL地址htp:www.someSchool.ed/someDepart-men/picture.gif,其中的www.someSehool.edu就是主機名,/someDepartment/picture, gif 就是路徑名。因為Web瀏覽器(Web browser)(例如Google和Firefox)實現了HTTP的客戶端,所以在Web環境中我們經常交替使用“瀏覽器”和“客戶”這兩個術語。Web服務器(Webserver)實現了HTTP的服務器端,它用于存儲Web對象,每個對象由URL.尋址。流行的Web服務器有Apache和 Microsoft Internet Information Server(微軟互聯網信息服務器)
HTTP定義了Web客戶向Web服務器請求Web頁面的方式,以及服務器向客戶傳送Web頁面的方式。我們稍后詳細討論客戶和服務器的交互過程,而其基本思想在下圖中進行了圖示。當用戶請求一個Web頁面(如點擊一個超鏈接)時,瀏覽器向服務器發出對該頁面中所包含對象的HTTP請求報文,服務器接收到請求并用包含這些對象的HTTP響應報文進行響應。
HTTP使用TCP作為它的支撐運輸協議(而不是在UDP上運行)。HTTP客戶首先發起一個與服務器的TCP連接。一旦連接建立,該瀏覽器和服務器進程就可以通過套接字接口訪問TCP。客戶端的套接字接口是客戶進程與TCP連接之間的門,在服務器端的套接字接口則是服務器進程與TCP連接之間的門。客戶向它的套接字接口發送HTTP請求報文并從它的套接字接口接收HTTP響應報文。類似地,服務器從它的套接字接口接收HTTP請求報文和向它的套接字接口發送HTTP響應報文。一旦客戶向它的套接字接口發送了一個請求報文,該報文就脫離了客戶控制并進入TCP的控制。TCP為HTTP提供可靠數據傳輸服務這意味著,一個客戶進程發出的每個HTTP請求報文最終能完整地到達服務器;類似地服務器進程發出的每個HTTP響應報文最終能完整地到達客戶。這里我們看到了分層體系結構最大的優點,即HTTP協議不用擔心數據丟失,也不關注TCP從網絡的數據丟失和亂序故障中恢復的細節。那是TCP以及協議棧較低層協議的工作。
注意到下列現象很重要:服務器向客戶發送被請求的文件,而不存儲任何關于該客戶的狀態信息。假如某個特定的客戶在短短的幾秒鐘內兩次請求同一個對象,服務器并不會因為剛剛為該客戶提供了該對象就不再做出反應,而是重新發送該對象,就像服務器已經完全忘記不久之前所做過的事一樣。因為HTTP服務器并不保存關于客戶的任何信息,所以我們說 HTTP是一個無狀態協議(stateless protocal)。我們同時也注意到 Web使用了客戶-服務器應用程序體系結構(如2.1節所述)。Web服務器總是打開的,具有一個固定的IP地址,且它服務于可能來自數以百萬計的不同瀏覽器的請求。