Web頁面是如何呈現的?

你知道當我們在網頁瀏覽器(Web browser)的位址列中輸入URL時,Web頁面是如何呈現的嗎?

Web頁面當然不能憑空顯示出來。根據Web瀏覽器位址列中指定的URL,Web瀏覽器從Web伺服器端獲取檔案資源(resource)等資訊,從而顯示出Web頁面。像這種通過傳送請求獲取伺服器資源的Web瀏覽器等,都可稱為客戶端(client)。

Web使用一種名為HTTP(HyperText Transfer Protocol,超文字傳輸協議[插圖])的協議作為規範,完成從客戶端到伺服器端等一系列運作流程。而協議是對規則的約定。可以說,Web是建立在HTTP協議上通訊的。

在深入學習HTTP之前,我們先來介紹一下HTTP誕生的背景。瞭解背景的同時也能瞭解當初制定HTTP的初衷,這樣有助於我們更好地理解。

為知識共享而規劃Web

1989年3月,網際網路還只屬於少數人。在這一網際網路的黎明期,HTTP誕生了。CERN(歐洲核子研究組織)的蒂姆·伯納斯-李(Tim Berners-Lee)博士提出了一種能讓遠隔兩地的研究者們共享知識的設想。最初設想的基本理念是:藉助多文件之間相互關聯形成的超文字(HyperText),連成可相互參閱的WWW(World Wide Web,全球資訊網)。現在已提出了3項WWW構建技術,分別是:把SGML(Standard GeneralizedMarkup Language,標準通用標記語言)作為頁面的文字標記語言的HTML(HyperText Markup Language,超文字標記語言);作為文件傳遞協議的HTTP;指定文件所在地址的URL(Uniform Resource Locator,統一資源定位符)。WWW這一名稱,是Web瀏覽器當年用來瀏覽超文字的客戶端應用程式時的名稱。現在則用來表示這一系列的集合,也可簡稱為Web。

網路基礎TCP/IP

接下來,我們僅介紹理解HTTP所需掌握的TCP/IP協議族的概要。

TCP/IP協議族

計算機與網路裝置要想相互通訊,雙方就必須基於相同的方法。比如,如何探測到通訊目標、由哪一邊先發起通訊、使用哪種語言進行通訊、怎樣結束通訊等規則都需要事先確定。不同的硬體、作業系統之間的通訊,所有的這一切都需要一種規則。而我們就把這種規則稱為協議(protocol)。

協議中存在各式各樣的內容。從電纜的規格到IP地址的選定方法、尋找異地使用者的方法、雙方建立通訊的順序,以及Web頁面顯示需要處理的步驟,等等。像這樣把與網際網路相關聯的協議集合起來總稱為TCP/IP。也有說法認為,TCP/IP是指TCP和IP這兩種協議。還有一種說法認為,TCP/IP是在IP協議的通訊過程中,使用到的協議族的統稱。

TCP/IP的分層管理

TCP/IP協議族裡重要的一點就是分層。TCP/IP協議族按層次分別分為以下4層:應用層、傳輸層、網路層和資料鏈路層。把TCP/IP層次化是有好處的。比如,如果網際網路只由一個協議統籌,某個地方需要改變設計時,就必須把所有部分整體替換掉。而分層之後只需把變動的層替換掉即可。把各層之間的介面部分規劃好之後,每個層次內部的設計就能夠自由改動了。值得一提的是,層次化之後,設計也變得相對簡單了。處於應用層上的應用可以只考慮分派給自己的任務,而不需要弄清對方在地球上哪個地方、對方的傳輸路線是怎樣的、是否能確保傳輸送達等問題。TCP/IP協議族各層的作用如下。

應用層

傳輸層

網路層(又名網路互連層)

鏈路層(又名資料鏈路層,網路介面層)

TCP/IP通訊傳輸流

利用TCP/IP協議族進行網路通訊時,會通過分層順序與對方進行通訊。傳送端從應用層往下走,接收端則往應用層往上走。我們用HTTP舉例來說明,首先作為傳送端的客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求。接著,為了傳輸方便,在傳輸層(TCP協議)把從應用層處收到的資料(HTTP請求報文)進行分割,並在各個報文上打上標記序號及埠號後轉發給網路層。在網路層(IP協議),增加作為通訊目的地的MAC地址後轉發給鏈路層。這樣一來,發往網路的通訊請求就準備齊全了。接收端的伺服器在鏈路層接收到資料,按序往上層傳送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端傳送過來的HTTP請求。

傳送端在層與層之間傳輸資料時,每經過一層時必定會被打上一個該層所屬的首部資訊。反之,接收端在層與層傳輸資料時,每經過一層時會把對應的首部消去。這種把資料資訊包裝起來的做法稱為封裝(encapsulate)。

與HTTP關係密切的協議:IP、TCP和DNS

按層次分,IP(Internet Protocol)網際協議位於網路層。Internet Protocol這個名稱可能聽起來有點誇張,但事實正是如此,因為幾乎所有使用網路的系統都會用到IP協議。TCP/IP協議族中的IP指的就是網際協議,協議名稱中佔據了一半位置,其重要性可見一斑。可能有人會把“IP”和“IP地址”搞混,“IP”其實是一種協議的名稱。IP協議的作用是把各種資料包傳送給對方。而要保證確實傳送到對方那裡,則需要滿足各類條件。其中兩個重要的條件是IP地址和MAC地址(Media AccessControl Address)。IP地址指明瞭節點被分配到的地址,MAC地址是指網絡卡所屬的固定地址。IP地址可以和MAC地址進行配對。IP地址可變換,但MAC地址基本上不會更改。

使用ARP協議憑藉MAC地址進行通訊

IP間的通訊依賴MAC地址。在網路上,通訊的雙方在同一區域網(LAN)內的情況是很少的,通常是經過多臺計算機和網路裝置中轉才能連線到對方。而在進行中轉時,會利用下一站中轉裝置的MAC地址來搜尋下一個中轉目標。這時,會採用ARP協議(Address Resolution Protocol)。ARP是一種用以解析地址的協議,根據通訊方的IP地址就可以反查出對應的MAC地址。

沒有人能夠全面掌握網際網路中的傳輸狀況

在到達通訊目標前的中轉過程中,那些計算機和路由器等網路裝置只能獲悉很粗略的傳輸路線。這種機制稱為路由選擇(routing),有點像快遞公司的送貨過程。想要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明確下站該送往哪個區域的集散中心。接著,那個區域的集散中心自會判斷是否能送到對方的家中。我們是想通過這個比喻說明,無論哪臺計算機、哪臺網路裝置,它們都無法全面掌握網際網路中的細節。

確保可靠性的TCP協議

確保資料能到達目標

為了準確無誤地將資料送達目標處,TCP協議採用了三次握手(three-wayhandshaking)策略。用TCP協議把資料包送出去後,TCP不會對傳送後的情況置之不理,它一定會向對方確認是否成功送達。握手過程中使用了TCP的標誌(flag)——SYN(synchronize)和ACK(acknowledgement)。傳送端首先傳送一個帶SYN標誌的資料包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的資料包以示傳達確認資訊。最後,傳送端再回傳一個帶ACK標誌的資料包,代表“握手”結束。若在握手過程中某個階段莫名中斷,TCP協議會再次以相同的順序傳送相同的資料包。