1. 程式人生 > >HTTP|通訊資料轉發程式:代理、閘道器和隧道

HTTP|通訊資料轉發程式:代理、閘道器和隧道

HTTP 通訊時,除客戶端和伺服器以外,還有一些用於通訊資料轉發的應用程式,例如代理、閘道器和隧道。它們可以配合伺服器工作。

    這些應用程式和伺服器的作用是將客戶端的請求轉發給通訊線路上的下一站伺服器和將從那臺伺服器傳送的響應轉發給客戶端。

    1>代理

    代理是有轉發功能的程式,它接收客戶端傳送的請求並轉發給伺服器,同時也接收伺服器返回的響應並轉發給客戶端。

    代理伺服器的基本行為就是接收客戶端傳送的請求然後轉發給其他伺服器。代理伺服器不會改變請求URI,會直接傳送給前方持有資源的目標伺服器。

    持有資源實體的伺服器被稱為源伺服器。從源伺服器返回的響應經過代理伺服器後再轉發給客戶端。

    在HTTP通訊中,可能會級聯多臺代理伺服器。請求和響應的轉發會經過數臺類似鎖鏈一樣連結起來的代理伺服器進行轉發。而轉發時,代理伺服器會新增Via首部欄位以標記出經過的主機資訊。

代理伺服器新增Via首部欄位

    代理有多種使用方法,按照兩種基準分類。一種是是否使用快取,另一種是是否會修改報文。

    快取代理會事先將資源的副本(快取)儲存在代理伺服器上。當代理再次接收到對相同資源的請求時,就可以不從源伺服器那裡獲取資源,而是將之前快取的資源作為響應返回。

    透明代理在轉發請求或響應時,不對報文做任何加工。而對報文內容進行加工的代理被稱之為非透明代理。

    2>閘道器

    閘道器是轉發其他伺服器通訊的伺服器,接受從客戶端傳送來的請求時,他就像自己擁有資源的源伺服器一樣對請求進行處理。客戶端可能都不回察覺,自己的通訊目標是一個閘道器。

閘道器示意圖

    閘道器的工作機制和代理十分相似,而閘道器能使通訊新路上的伺服器提供非HTTP協議服務。

    利用閘道器可以提高通訊的安全性,因為可以在客戶端和閘道器之間的通訊線路上加密以確保連線的安全。比如使用閘道器和資料庫進行連線,使用閘道器和信用卡結算系統聯動。

    3>隧道

    隧道可以在相隔很遠的客戶端和伺服器兩者之間進行中轉,並保持雙方通訊連線。

    隧道可以按照要求在客戶端和伺服器端建立一條通訊線路,可以採用SSL等加密手段進行通訊。隧道的作用是確保客戶端能夠與伺服器進行安全通訊。

    隧道本身不會去解析HTTP請求,也就是說,請求會保持原樣轉給之後的伺服器。而在通訊雙方斷開連線後,隧道本身也會結束。

    隧道本身是透明的,客戶端不用在意隧道的存在。