Mr.J-- HTTP學習筆記(八)-- 網關

我的專欄:  HTTP學習筆記

網關是資源和應用程序之間的粘合劑。 應用程序可以(通過 HTTP 或其他已定義的接口) 請求網關來處理某條請求,網關可以提供一條響應。

(a)網關收到了對 FTP URL 的 HTTP 請求。 然後網關打開 FTP 連接,並向 FTP 服務器發佈適當的命令。 然後將文檔和正確的 HTTP 首部通過 HTTP回送。

(b)網關通過 SSL 收到了一條加密的 Web 請求, 網關會對請求進行解密,然後向目標服務器轉發一條普通的 HTTP 請求。 可以將這些安全加速器直接放在(通常處於同一場所的) Web 服務器前面, 以便爲原始服務器提供高性能的加密機制。

(c)網關通過應用程序服務器網關 API, 將 HTTP 客戶端連接到服務器端的應用程序上去。

客戶端和服務器端網關

Web 網關在一側使用 HTTP 協議, 在另一側使用另一種協議。並以此對網關進行描述:

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

服務器端網關(server-side gateway) 通過 HTTP 與客戶端對話, 通過其他協議與服務器通信(HTTP/*)。
客戶端網關(client-side gateway) 通過其他協議與客戶端對話, 通過 HTTP 與服務器通信(*/HTTP)。

協議網關

將 HTTP 流量導向網關時所使用的最常見的方式是:顯式地配置瀏覽器使用網關, 對流量進行透明的攔截, 或者將網關配置爲替代者(反向代理)。

HTTP/*: 服務器端Web網關

網關會打開一條到原始服務器 FTP 端口(端口 21) 的 FTP 連接, 通過 FTP 協議獲取對象。 網關會做下列事情:

• 發送 USER 和 PASS 命令登錄到服務器上去;
• 發佈 CWD 命令, 轉移到服務器上合適的目錄中去;
• 將下載類型設置爲 ASCII;
• 用 MDTM 獲取文檔的最後修改時間;
• 用 PASV 告訴服務器將有被動數據獲取請求到達;
• 用 RETR 請求進行對象獲取;
• 打開到 FTP 服務器的數據連接, 服務器端口由控制信道返回; 一旦數據信道打開了, 就將對象內容回送給網關。

HTTP/HTTPS: 服務器端安全網關

一個組織可以通過網關對所有的輸入 Web 請求加密, 以提供額外的隱私和安全性保護。 客戶端可以用普通的 HTTP 瀏覽 Web 內容, 但網關會自動加密用戶的對話。

HTTPS/HTTP客戶端安全加速器網關

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

 資源網關

常見的網關:應用程序服務器, 會將目標服務器與網關結合在一個服務器中實現。 應用程序服務器是服務器端網關, 與客戶端通過 HTTP 進行通信, 並與服務器端的應用程序相連。

第一個流行的應用程序網關 API 就是通用網關接口(Common Gateway Interface,CGI)。

服務器與網關應用程序之間交互的基本運行機制

CGI

CGI 應用程序是獨立於服務器的, 所以, 幾乎可以用任意語言來實現, 包括 Perl、Tcl、 C 和各種 shell 語言。它在服務器和衆多的資源類型之間提供了一種簡單的、 函數形式的粘合方式, 用來處理各種需要的轉換。 這個接口還能很好地保護服務器, 防止一些糟糕的擴展對它造成的破壞。

CGI 協議爲外部翻譯器與現有的 HTTP 服務器提供了一種簡潔的接口方式, 但如果想要改變服務器自身的行爲, 或者只是想儘可能地提升能從服務器上獲得的性能呢? 服務器開發者爲這兩種需求提供了幾種服務器擴展 API,服務器都提供了一些 API 接口, 允許開發者通過這些接口改變服務器的行爲, 或者爲不同的資源提供一些定製的接口。 這些定製接口爲開發者提供了強大的接口方式。

應用程序接口和Web服務

應用程序之間要配合工作, 所要交互的信息比 HTTP 首部所能表達的信息要複雜得多。因特網委員會開發了一組允許 Web 應用程序之間相互通信的標準和協議。Web 服務可以用 XML 通過 SOAP 來交換信息。 XML(Extensible Markup Language,擴展標記語言) 提供了一種創建數據對象的定製信息, 並對其進行解釋的方法。SOAP(Simple Object Access Protocol, 簡單對象訪問協議) 是向 HTTP 報文中添加XML 信息的標準方式。

隧道

通過HTTP應用程序訪問使用非HTTP協議的應用程序。Web隧道是用HTTP的CONNECT方法建立起來的。CONNECT 方法請求隧道網關創建一條到達任意目的服務器和端口的 TCP 連接, 並對客戶端和服務器之間的後繼數據進行盲轉發。
 

CONNECT請求

除了起始行之外, CONNECT 的語法與其他 HTTP 方法類似。 一個後面跟着冒號和端口號的主機名取代了請求 URI。 主機和端口都必須指定:

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

CONNECT響應

發送了請求之後, 客戶端會等待來自網關的響應。 和普通 HTTP 報文一樣, 響應碼200 表示成功。

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

與普通 HTTP 響應不同, 這個響應並不需要包含 Content-Type 首部。 此時連接只是對原始字節進行轉接。

SSL隧道

加密 SSL, 其信息是加密的, 無法通過傳統的代理服務器轉發。 隧道會通過一條 HTTP 連接來傳輸 SSL 流量, 以穿過端口 80 的 HTTP 防火牆。

(a) SSL 流量被直接發送給了一個(SSL 端口 443 上的) 安全 Web 服務器。

(b) SSL 流量被封裝到一條 HTTP 報文中, 並通過 HTTP 端口 80 上的連接發送, 最後被解封裝爲普通的 SSL 連接。

SSL隧道與HTTP/HTTPS網關的對比

網關處理 FTP方式缺點:

• 客戶端到網關之間的連接是普通的非安全 HTTP;
• 儘管代理是已認證主體, 但客戶端無法對遠端服務器執行 SSL 客戶端認證(基於 X509 證書的認證) ;
• 網關要支持完整的 SSL 實現。

 

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