TCP/IP 協定與 Internet 網路:第十五章 全球資訊網系統  上一頁    下一頁

 

翻轉工作室:粘添壽

 

15-5 HTTP 傳輸協定

『超文件傳輸協定』(HyperText Transfer Protocol, HTTP是針對 Web 設計的傳輸協定。目前使用的協定大多是 HTTP/1.0RFC 1945)以上的版本,而在 HTTP/1.1RFC 2068RFC 2616)版中增加了虛擬主機的功能,相信會有更新版本陸續被發展出來。在 HTTP 協定下,伺服端和客戶端之間也是以 NVT ASCII(第十二章介紹)終端機模式來互相通訊,屬於『要求/回應』的存取方式。也就是說,客戶端以 ASCII 文字的通訊命令,來要求伺服端執行,伺服端將執行結果以 ASCII 文字方式回應給客戶端,基本上,所有請求命令都由客戶端要求,而伺服端只是被動地接受命令來工作。

15-5-1 HTTP 命令與回覆

基本上,HTTP 協定只負責伺服器和客戶端之間文件的傳輸工作,並不理會文件格式(如,HTMLVBScriptJavaScript 等等),文件格式是由瀏覽器上相對應的直譯程式來處理。也就是說,無論何種格式都以 ASCII 編碼來傳輸,既然,客戶和伺服器之間是以 NVT 終端機模式通訊,我們也可以利用 Telnet 程式登入該傳輸埠口,如下:

[tsnien@linux-2 tsnien]$ telnet www.cu.edu.tw 80

Trying 163.15.2.30...

Connected to linux-2.cu.edu.tw (163.15.2.30).

Escape character is '^]'.

get /index.html HTTP/1.1 (輸入 HTTP 命令)

雖然我們可以直接輸入 HTTP 命令,但傳回文件時,因顯示平台(不是瀏覽器)不符,而會發生錯誤的情形。HTTP 協定包含下列幾種基本命令:

(1)  GET請求讀取網頁。瀏覽器以 GET 命令,請求伺服器送出網頁,以 MIME 方式編碼。

(2)  HEAD請求讀取網頁的檔頭(header)。客戶端僅請求訊息檔頭,而非實際網頁。這方法可取得網頁最後修改時間,可用在建立或測試 URL 的有效性。

(3)  PUT請求儲存網頁。客戶端寫入網頁,提供客戶端建立網頁的功能。

(4)  POST附加一個名稱資源。客戶端將資料附加到某一資源的資料之後。

(5)  DELETE刪除網頁。客戶端要求刪除某一網頁。

(6)  LINK建立超連結。客戶端要求加入超連結。

(7)  UNLINK刪除超連結。客戶端要求刪除超連結。

如同其它應用系統一樣,HTTP 伺服端也以 3 個數字來回應執行的結果,第一個數字表示回應種類,如 1×× 表示訊息,目前未使用;2×× 表示命令執行成功(Success);3 ×× 為命令執行轉向(Redirection);4×× 為客戶端錯誤(Client Error);5×× 為伺服端錯誤(Server Error),常用的回應訊息如下:

200執行正確(OK

201開啟服務(Created

202接受服務(Accepted

204無此文件(No content

301永久移除(Moved Permanently

302暫時移除(Moved Temporarily

400命令錯誤(Bad Request

401未經授權(Unauthorized

403請求禁止(Forbidden

500伺服器錯誤(Internal Server Error

501伺服器未實現(Not Implemented

502閘門錯誤(Bad Gateway

除了回應 3 個數字來代表處理結果外,在數字後面也會緊接著一連串文字(ASCII),來說明處理結果的訊息。

15-5-2 網頁快取功能

如果客戶端想要瀏覽某一網頁時,都必須到該網頁的伺服器上索取,這將使全球資訊網的效率大打折扣。試想,我們想要瀏覽某一網站,而這網站可能位於世界的任何一個角落,客戶端和伺服端之間可能需要經過多個網路端點才能到達,然而,網路上使用量高時,所產生的高負載,將可能導致整個網路癱瘓掉,還好有網頁快取功能來彌補這個缺憾。

『代理伺服器』(Proxy Server是網頁快取功能中最主要的設備,它有兩個主要功能,其一為代理功能,用來接受客戶端的要求,連接到網頁伺服器,並索取網頁來回應給客戶端;其二為快取功能,它將所索取到的網頁儲存到快取資料庫內,以備其它客戶端有同樣需求時,再直接給予回應。整個快取功能如圖 15-5 所示,當客戶端需要索取某一網頁時,首先到快取紀錄上查詢(本機上)是否有該網頁,如果有,便直接由快取紀錄上索取網頁來顯示(編號 (1));如果網頁不在快取紀錄上,瀏覽器便連結到 Proxy Server,請求 Proxy Server 來代理存取網頁,此時,Proxy Server 首先到快取資料庫上查詢是否有該筆網頁,如果有便直接回應給客戶端(編號 (2));如果網頁資料也不在快取資料庫內,Proxy Server 便啟動網路連線到該網頁的伺服器上索取,並將索取回來的網頁存入快取資料庫上,再回應給客戶端(編號 (3))。

15-5 網頁快取功能

我們可以來想像一種情況,如果有一部 Proxy Server,被許多客戶端(瀏覽器)所指定,它對Internet 網路上的網頁伺服器的存取機會將非常大,相對的,其快取資料庫上的網頁必然非常豐富,當客戶端要求網頁時,便能提高快取資料的機率,因此連結到此 Proxy Server 的瀏覽器,所能抓取網頁的速度最快,相對的,造成其它客戶端更喜歡連結到此 Proxy Server,因此,網路上也常會出現許多著名的 Proxy Server。但從另一觀點來看,要使 Proxy Server 能接受許多客戶端的連線要求,除了 Proxy Server 主機的處理能力要強外,網路傳輸效率(或網路速度)更不容忽視。

15-5-3 虛擬主機功能

何謂『虛擬主機』(Virtual Host?就是在一部主機(或一套伺服軟體)上,可以架設多個網頁伺服器,除了原來預設(主要)伺服器外,增加出來的伺服器都稱為『虛擬主機』。如圖 15-6 所示,我們安裝了一套 Apache 伺服軟體在 linux-2 主機上,除了建立一部主要伺服器(www.cu.edu.tw)外,還可增加多部虛擬主機(www.tsnien.idv.tw 等),對客戶端而言,存取主要伺服器上的網頁或由虛擬主機上存取,並沒有兩樣。建構虛擬主機方式有下列三種類型:

15-6 虛擬主機架構

IP-based 虛擬主機:有些作業系統允許在一部主機(或稱網路卡)上,可設定多個虛擬 IP 位址。IP-based 的做法是將所增加的伺服器安裝在這些虛擬 IP 位址上,而達到虛擬主機的功能。目前 IP 位址漸漸不足,此種做法雖然容易,但會浪費 IP 空間。

Port-based 虛擬主機:一般主要伺服器是連接到 80/tcp 埠口,我們只要將所增加的伺服器連接到其它埠口(1023 以後),而仍使用原來的 IP 位址,便可達到虛擬主機的功能,譬如,www.cu.edu.tw:8000

Name-based 虛擬主機:以網站名稱來分辨的虛擬主機,它的做法看似很簡單,只要在 DNS 伺服器上增加虛擬主機名稱對應到原 IP 位址,而在網頁伺服器上,規劃每一網域名稱所存取的網頁文件位置,便可達成虛擬主機的功能,但必須有新的協定來支援(HTTP/1.1)。

其中 IP-based Port-based 的建構較沒有問題,只要用不同的 IP 位址或傳輸埠口來區分不同的網站即可。但在 Name-based 方面,要在同一部伺服器上,以不同的網域名稱來分辨不同的網站,就較為困難。記得當我們指定某一個 URL 位址(www.cu.edu.tw)時,其實該主機名稱(www)也是一個別名(linux-2),而它會固定連接到埠口 80163.15.2.30:80)。當我們用虛擬主機名稱(www.tsnien.idv.tw)連結到同一伺服器時,經過 DNS 解譯後位址也是 163.15.2.30,連接到伺服器同樣是第 80 埠口,那麼伺服器如何來分辨 www.cu.edu.tw www.tsnien.idv.tw 兩個不同網站呢?

HTTP/1.1 協定為了解決這個問題,在『要求網頁』(Get的命令格式當中,加入一個主機名稱(Host:)選項欄位,伺服器接收此命令後,便可利用所加入的主機名稱,來分辨到底是存取哪一網站的網頁,利用此方法來達成 Name-based 虛擬主機的功能。Get 命令格式(HTTP/1.1)如下:

命令1Get <SP> / <SP> HTTP/1.1 <CR><LF> Host:www.cu.edu.tw <CR><LF>

命令2Get <SP> / <SP> HTTP/1.1 <CR><LF> Host:www.tsnien.idv.tw <CR><LF>

第一個命令表示是索取 www.cu.edu.tw 網站上的網頁;第二個命令是針對 www.tsnien.idv.tw 網站存取的。然而這兩個網站都屬於同一網頁伺服器所管轄,對使用者而言,也分不出哪一個是主要網站或虛擬主機。

 

 

<GOTOP>