讀《圖解HTTP》總結--第五章

與HTTP協作的Web服務器

    一臺Web服務器可搭建多個獨立域名的Web網站,也可作爲通信路徑上的中轉服務器提升傳輸效率。


5.1 用單臺虛擬主機實現多個域名

    HTTP/1.1規範允許一臺HTTP服務器搭建多個Web站點。比如,提供Web託管服務(Web Hosting Service)的供應商,可以用一臺服務器爲多個客戶服務,也可以以每個客戶持有的域名運行各自不同的網站。這是因爲利用了虛擬主機(Virtual Host)的功能。即使物理層面只有一臺服務器,但只要使用虛擬主機功能,則可以假象已具有多臺服務器。客戶端使用HTTP協議訪問服務器時,會經常採用類似www.hackr.jp這樣的主機名和域名。

    在互聯網上,域名通過DNS服務映射到IP地址(域名解析)之後訪問目標網站。可見當請求發送到服務器時,已經是以IP地址形式訪問了。所以如果一臺服務器內託管了www.tricorder.jp和www.hackr.jp這兩個域名,當接收到請求時就需要弄清楚究竟要訪問哪個域名。在相同的IP地址下,由於虛擬主機可以寄存多個不同主機名和域名的Web網站,因此在發送HTTP請求時,必須在Host首部內完整指定主機名或域名的URI。


5.2 通信數據轉發程序:代理、網關、隧道

    HTTP通信時,除了客戶端和服務端以外,還有一些用於通信數據轉發的應用程序,例如代理、網關和隧道。它們可以配合服務器工作。這些應用程序和服務器可以將請求轉發給通信線路上的下一站服務器,並且能接收從那臺服務器發送的響應在轉發給客戶端。


代理代理是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端"中間人"的角色,接收由客戶端發送的請求並轉發給服務器;同時也接收服務器返回的響應在轉發給客戶端。
網關網關是轉發其他服務器通信數據的服務器,接收從客戶端發送來的請求時,它就像自己擁有資源的服務器一樣對請求進行處理。有時客戶端可能都不會察覺,自己的通信目標是一個網關
隧道隧道是在相隔甚遠的客戶端和服務器之間進行中轉,並保持雙方通信連接的應用程序。


5.2.1 代理

    代理服務器的基本行爲就是接收客戶端發送的請求後轉發給其它服務器。代理不改變請求URI,會直接發送給前方持有資源的目標服務器。持有資源實體的服務器被稱爲源服務器。從源服務器返回的響應經過代理服務器後再傳給客戶端。

    在HTTP通信過程中,可級聯多臺代理服務器。請求和響應的轉發會經過數臺類似鎖鏈一樣連接起來的代理服務器。轉發時,需要附加Via首部字段以標記出經過的主機信息。

wKiom1gS7GPCvAkUAACfmEMG9hk079.png-wh_50


wKioL1gS7n-TTH3gAAB1HETG9rw191.png-wh_50

    使用代理服務器的理由有:利用緩存技術減少網絡帶寬流量,組織內部針對特定網站的訪問控制,以獲取訪問日誌爲主要目的,等等。代理有多種實用方法,按照兩種基準分類。一種是是否使用緩存;另一種是是否會修改報文。

    緩存代理

    代理轉發響應時,緩存代理(Caching Proxy)會預先將資源的副本(緩存)保存在代理服務器上。當代理再次接收到對相同資源的請求時,就可以不從源服務器那裏獲取資源,而是將之前緩存的資源作爲響應返回。

    透明代理

    轉發請求或響應時,不對報文做任何加工的代理類型被稱爲透明代理(Transparent Proxy)。反之,對報文內容進行加工的代理被稱爲非透明代理。


5.2.2 網關

    網關的工作機制和代理十分相似。而網關能使通信線路上的服務器提供非HTTP協議服務。利用網關能提高通信的安全性,因爲可以在客戶端與網關之間的通信線路上加密以確保連接的安全。比如,網關可以連接數據庫,使用SQL語句查詢數據。另外,在Web購物網站上進行信用卡結算時,網關可以和信用卡結算系統聯動。

wKioL1gS8nCCqg0dAABmzQP7zQE467.png-wh_50


5.2.3 隧道

    隧道可按要求建立起一條與其他服務器的通信線路,屆時使用SSL等加密手段進行通信。隧道的目的是確保客戶端能與服務器進行安全的通信。隧道本身不會去解析HTTP請求。也就是說,請求保持原樣中轉給之後的服務器。隧道會在通信雙方斷開連接時結束。

wKioL1gS9bCgRWSwAAB5TZ_PpYw681.png-wh_50



5.3 保存資源的緩存

    緩存是指代理服務器或客戶端本地磁盤內保存的資源副本。利用緩存可減少資源服務器的訪問,因此也就節省了通信流量和通信時間。緩存服務器是代理服務器的一種,並歸類在緩存代理類型中。換句話說,當代理服務器從服務器返回響應時,代理服務器將會保存一份資源的副本。

    緩存服務器的優勢在於利用緩存可避免多次從源服務器轉發資源。因此客戶端可就近從緩存服務器上獲取資源,而源服務器也不必多次處理相同的請求了。

wKiom1gS-jmwUBGbAADEq0g59Sk370.png-wh_50

5.3.1 緩存的有效期

    即便緩存服務器內又緩存,也不能保證每次都會返回對相同資源的請求。因爲這關係到被緩存資源的有效性問題。當遇上源服務器上的資源更新時,如果還是使用不變得緩存,那麼就會演變成返回更新前的"舊"資源了。即使存在緩存,也會因爲客戶端的要求、緩存的有效性等因素,向源服務器確認資源的有效性。若判斷緩存失效,緩存服務器將會再次從源服務器上獲取"新"資源。

wKiom1gS_SiCMab3AAB81wXBunk858.png-wh_50


5.3.2 客戶端的緩存

    緩存不僅存在於緩存服務器內,還可以存在客戶端瀏覽器中。以Internet Explorer程序爲例,把客戶端緩存稱爲臨時網絡文件(Temporary Internet File).瀏覽器緩存如果有效,就不必在向服務器請求相同資源了,可直接從本地磁盤內讀取。另外,和緩存服務器相同的一點是,當判定緩存過期後,會向資源服務器確認資源的有效性。若判斷瀏覽器緩存失效,瀏覽器會再次請求新資源。



PS:在HTTP出現之前的協議

    在HTTP普及之前,也就是從互聯網誕生至今,曾出現過各式各樣的協議。在HTTP規範確立之際,制定者們參考了那些協議的功能。也有些協議現在已經徹底退出了人們的視線。


    FTP(File Transfer Protocol)

    傳輸文件時使用的協議。該協議歷史久遠,可追溯到1937年前後,比TCP/IP協議簇的出現還要早。雖然他在1995年被HTTP的流量(Traffic)超越,但時至今日,仍被廣泛沿用。

    

    NNTP(Network News Transfer Protocol)

    用於NetNews電子會議室內傳送消息的協議。(現在基本不怎麼使用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章