網關
網關可以作為某種翻譯器使用,它抽象出了一種能夠到達資源的方法。網關是資源和應用程序之間的粘合劑。應用程序可以請求網關來處理某條請求,網關可以提供一條響應。
有些網關會自動將Http流量轉換為其他協議,這樣http客户端無需瞭解其他協議,就可以與其他應用程序時行交互了。
web網關在一側使用http協議,在另一側使用另一種協議
可以用一個斜槓分隔客户端和服務器端協議,並以此對網關進行描述:客户端協議/服務器端協議
協議網關
將http流量導向網關時所使用的方式與將流量導向代理的方式相同。最常見的方式是,顯式地配置瀏覽器使用網關,對流量進行透明的攔截,或者將網關配置為替代者 反向代理。
1 HTTP/* :服務器端web網關
請求流入原始服務器時,服務器端web網關會將客户端Http請求轉換為其他協議。
2 HTTP/HTTPS:服務器端安全網關
一個組織可能通過網關對所有的輸入web請求加密,以提供額外的隱私和安全性保護。客户端可以用普通的HTTP瀏覽web內容,但網關會自動加密用户的對話。
3 HTTPS/HTTP客户端安全加速器網關
HTTPS/HTTP網關位於web服務器之前,通常作為不可見的攔截網關或反向代理使用。它們接收安全 HTTPS流量,對安全流量進行解密,並向web服務器發送普通的HTTP請求。
這些網關中通常都包含專用的解密硬件,以比原始服務器有效得多的方式解密安全流量,以減輕原始服務器的負荷。這些網關在網關和原始服務器之間發送的是未加密的流量,所以要謹慎使用,確保網關和原始服務器之間的網絡是安全的。
資源網關
第一個應用程序網關API就是通用網關接口CGI。是一個標準接口集。web服務器可以用它來裝載程序以響應對特定URL 的HTTP請求,並收集程序的輸出數據,將其它在HTTP響應中回送。
CGI的處理對用户來説是不可見的。從客户端的角度來看,就像發起一個普通請求一樣。它完全不清楚服務器和CGI應用程序之間的轉接過程。URL中出現字符cgi和可能出現的 ? 是客户端發現使用了cgi應用程序的唯一線索。
每條CGI請求引發一個新進程開銷高。
新型CGI 快速CGI,模擬CGI,但它是作為持久守護進程運行的,消除了為每個請求建立或拆除新進程所帶來的性能損耗。
服務器擴展API
web服務是應用程序共享信息的一種新機制。
SOAP簡單對象訪問協議,是向http報文中添加XML信息的標準方式。
隧道
web隧道允許用户通過http連接發送非Http流量,使用web隧道最常見的原因就是要在http連接中嵌入非http流量,這樣,這類流量就可以穿過只允許web流量通過的防火牆了。
1 用connect建立Http隧道
connect方法請求隧道網關創建一條到達任意目的服務器和端口的TCP連接,並對客户端和服務器之間的後繼數據進行盲轉發。
客户端發送一條connect請求給隧道網關。客户端的connect方法請求隧道網關打開 一條TCP連接
創建TCP連接
一旦建立了TCP連接,網關就會發送一條HTTP 200 connection established響應來通知客户端
些時,隧道就建立起來了。客户端通過http隧道發送的所有數據都會被直接轉發給輸出TCP連接,服務器發送的所有數據都會通過http隧道轉發給客户端。
connect請求:
起始行:
CONNECT home.netscape.com:443 HTTP/1.0
User-agent:Mozilla/4.0
起始行之後,有零個或多個http請求首部字段。這些行照例以CRLF結尾,首部列表以一個空的CRLF結束。
connect響應
響應碼 200表示成功 。
HTTP/1.0 200 Connection Established
Proxy-agent:Netscape-Proxy/1.1
與普通Http響應不同,這個響應並不需要包含Contect-Type首部。此時連接只是對原始字節進行轉接,不再是報文的承載者,所以不需要使用內容類型了。
一旦隧道建立起來了,數據就可以在任意時間流向任意方向了。
如果在任意時刻,隧道 任意一個端點斷開了連接,那個端點發出 所有未傳輸數據都會被傳送給另一個端點,之後,到另一端點的連接也會被代理終止。如果還有數據要傳輸給關閉連接的端點,數據會被丟棄。
SSL隧道
加密SSL,其信息是加密的,無法通過傳統的代理服務器轉發。隧道會通過一條HTTP連接來傳輸SSL流量,以穿過端口80的HTTP防火牆。
為了讓SSL流量經現存的代理防火牆進行傳輸,HTTP中添加了一項隧道特性,在此特性中,可以將原始的加密數據放在HTTP報文中,通過普通的HTTP信道傳送。
為了降低對隧道的濫用,網關應該只為特定的知名端口,比如https的端口443 打開隧道。
對於SSL隧道機制,無需在代理中實現SSL,SSL會話是建立在產生請求的客户端和目的web服務器之間的,中間的代理服務器只是將加密數據經過隧道傳輸,並不會在安全事務中扮演其他的角色。
中繼
http中繼 是沒有完全遵循Http規範的簡單http代理 。中繼負責處理http中建立連接的部分,然後對字節進行盲轉發。
由於無法正確處理connection首部,所以有潛在的掛起keep-alive連接的可能。
對任何大規模部署來説,都要非常認真地考慮使用真正的、完全遵循http的代理服務器