HTTP權威指南學習--第8章 整合點:閘道器、隧道及中繼

用心一發表於2020-12-19

人們已經從只在網上傳送靜態的線上文件,發展到共享更復雜的資源,比如資料庫內容或動態生成的HTML頁面。本章簡要介紹了一些開發者用HTTP訪問不同資源的方法,展示了開發者如何將HTTP作為框架啟動協議和應用程式通訊。
主要內容:
在HTTP和其他協議及應用程式之間起到介面作用的閘道器;
允許不同型別的web應用程式互相通訊的應用程式介面
允許使用者在HTTP連線上傳送非HTTP流量的隧道
作為一種簡化的HTTP代理,一次將資料轉發一跳的中繼

8.1 閘道器

單個應用程式無法處理所有這些能想到的資源。為了解決這個問題,開發者提出了網管的概念,閘道器可以作為某種翻譯器使用,他抽象了一種能夠到達資源的方法。
應用程式可以(通過HTTP或其它已定義的協議)請求閘道器來處理某條請求,閘道器可以提供一條響應。閘道器可以向資料庫傳送查詢語句,或者生成動態的內容,就像一個門一樣:進去一條請求,出來一個響應。

有些閘道器會自動將HTTP流量轉換為其他協議,這樣HTTP客戶端無需瞭解其它協議就可以和其他應用程式進行互動了。

客戶端和伺服器端閘道器
Web閘道器在一側使用HTTP協議,在另一側使用另一種協議。

<客戶端協議>/<伺服器端協議>

伺服器端閘道器(server-side gateway):通過HTTP與客戶端對話,通過其他協議與伺服器通訊(HTTP/).
**客戶端閘道器(client-side gateway)**通過其他協議與客戶端對話,通過HTTP與伺服器通訊(
、HTTP)。

8.2 協議閘道器

如何配置閘道器,可以手工配置。

8.2.1 HTTP/*:伺服器端web閘道器

請求流入原始伺服器時,伺服器端閘道器會將客戶端HTTP請求轉換成其他協議。比如將HTTP請求轉化成FTP請求並獲得結果,最後用HTTP將結果返回給客戶端。

8.2.2 HTTP/HTTPS:伺服器端安全閘道器

客戶端可以用普通的HTTP瀏覽web內容,但閘道器會自動加密使用者的對話。

8.2.3 HTTPS/HTTP客戶端安全加速器閘道器

它們接收安全的HTTPS流量,對安全流量進行解密,並向Web伺服器傳送普通HTTP請求。

8.3 資源閘道器

最常見的閘道器–應用程式伺服器,會將目標伺服器與閘道器結合在一個伺服器中實現。應用程式伺服器是伺服器端閘道器,與客戶端通過HTTP進行通訊,並與伺服器端的應用程式相連。
應用程式伺服器可以將HTTP客戶端連線到任意後臺應用程式。

第一個流行的應用程式閘道器API就是通用閘道器介面(Common Gateway Interface, CGI )。CGI是一個標準介面集,Web伺服器可以用它來裝載程式以響應對特定URL的請求,並收集程式的輸出資料,將其放在HTTP響應中回送。

8.3.1 CGI

CGI是第一個,可能仍然是得到最廣泛使用的伺服器擴充套件。在web上廣泛應用於動態HTML、信用卡處理以及資料庫查詢等任務。

CGI應用程式獨立於伺服器,可以用任意語言來實現。

CGI的處理對使用者來說是不可見的。
CGI優缺點,分離的結構導致如果為每條CGI請求引發一個新的程式的開銷是很高的,會限制那些使用CGI的伺服器的效能。為此,人們開發了新的CGI–快速CGI。這個藉口模擬了CGI,但它是作為持久守護程式執行的,消除了為每個請求建立或拆除新程式所帶來的效能損耗。

8.3.2 伺服器擴充套件API

伺服器開發者提供了幾種伺服器擴充套件API,為web開發者提供了強大的藉口來提高效能,以便他們將自己的模組與HTTP伺服器直接相連。擴充套件API允許程式設計師將自己的程式碼嫁接到伺服器上,或者用自己的程式碼將伺服器的一個元件完整地替換出來。

如微軟的FPSE(FrontPage 伺服器端擴充套件)。

8.4 應用程式介面和web服務

在兩個應用程式之間進行協議介面的協商,以便這些應用程式之間可以進行資料交換。

8.5 隧道

web隧道可以通過HTTP應用程式訪問使用非HTTP協議的應用程式。它允許使用者通過HTTP連線傳送非HTTP流量,這樣就可以在HTTP上捎帶其他協議資料了。這樣這類流量就可以穿過只允許web流量通過的防火牆了。

8.5.1 用CONNECT建立HTTP隧道

web隧道是用HTTP的CONNECT方法建立起來的。CONNECT方法請求隧道閘道器建立一條到達任意目的伺服器和埠的TCP連線,並對客戶端和伺服器之間的後繼資料進行盲轉發。
1.CONNECT請求

CONNECT home.netscape.com:443 HTTP/1.0
User-Agent: Mozilla/4.0

2.CONNECT響應

HTTP/1.0 200 Connection Established
Proxy-agent: Netscape-Proxy/1.1

8.5.2 資料隧道、定時及連線管理

管道化資料對閘道器是不透明的,所以閘道器不能對分組的順序和分組流做任何假設。一旦隧道建立起來了,資料就可以在任意時間流向任意方向了。

8.5.3 SSL隧道

最初開發web隧道是為了通過防火牆傳輸加密的SSL流量。隧道會通過一條HTTP連線來傳輸SSL流量,以穿過埠80的HTTP防火牆。
這項特性可能會被濫用,使得惡意協議通過HTTP隧道流入某個組織內部。

8.5.4 SSL隧道與HTTP/HTTPS閘道器的對比

對於SSL隧道來說,無需在代理中實現SSL。SSL會話是建立在產生請求的客戶端和目的(安全的)Web伺服器之間的,中間的代理伺服器只是將加密的資料經過隧道傳輸,並不在安全事務中扮演其他角色。

8.5.5 隧道認證

結合了代理的認證機制和隧道,對客戶端使用隧道的權利進行認證。

8.5.6 隧道的安全性考慮

總的來說,隧道閘道器無法驗證目前使用的協議是不是就是它本來打算經過隧道傳輸的協議。為了降低對隧道的濫用,閘道器應該職位特定的知名埠,如HTTPS的埠443開啟隧道。

8.6 中繼

HTTP中繼(relay)是沒有完全遵循HTTP規範的簡單HTTP代理。中繼負責處理HTTP中建立連線的部分,然後對位元組進行盲轉發。
因此會產生keep-alive導致的請求掛起問題。

相關文章