圖解HTTP權威指南(四)| 代理

作者簡介

李先生(Lemon),高級運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開操作系統(CPU、內存、磁盤)、網絡等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。
 
                                                                               

一、什麼是Web代理

Web代理(proxy)服務器是網絡的中間實體。代理位於客戶端和服務端之間,扮演「中間人」的角色,在各端點之間來回傳送HTTP報文。某個客戶端專用的代理為私有代理,眾多客戶端共享的代理稱為公共代理
 
 
 

二、Web代理和網關的區別

代理:連接的是兩個或多個使用相同協議的應用程序。
網關:連接的是兩個或多個使用不同協議的端點。
 
 
 

三、為什麼使用代理

1、兒童過濾器
 
假如在一個學校,既要對教育站點訪問無障礙,又要使用代理來組織對成人內容的訪問。
 

 

 

2、文檔訪問控制
 
使用代理服務器在大量Web服務器和Web資源之間實現統一的訪問控制策略。如
a)允許客戶端1無限制地訪問服務器A的新聞頁面
b)客戶端2可以無限制地訪問互聯網
c)在允許客戶端3訪問服務器B之前,需要輸入賬號密碼
 
 
 
3、安全防火牆
 
防火牆代理提高安全性,代理服務器會在網絡中的單一安全節點上限制哪些應用層協議的數據可以流入另一組織。還可以提供用來消除病毒的Web和E-mail代理使用的那種掛鈎程序,對流量進行詳細的檢查。

 

 
4、Web緩存
 
代理緩存維護了常用的文檔的本地副本,並將他們按需提供,以減少緩慢且昂貴的網絡通信。
 
5、反向代理
 
代理可以假扮Web服務器,這些反向代理的代理接收發給Web服務器的真實請求,與Web服務器不同的是它們可以發起與其他服務器的通信,以便按需定位所請求的內容。
 
6、內容服務器
 
代理服務器可以作為「內容服務器」使用,根據互聯網流量狀況以及內容類型將請求導向特定的Web服務器。也可實現各種服務級別的請求,比如用戶付費需要提高性能,內容路由器可以將請求轉發到附近的複製緩存。
 
7、轉碼器
 
代理服務器在將內容發送給客戶端之前,可以修改內容的主體格式。在這些數據表示法之間進行的透明轉換被稱為轉碼。如在傳輸GIF圖片時,將其轉換為JPEG圖片;也可以對圖片進行壓縮。或者在傳輸文檔的過程中將其轉換成另一種語言(將英文文檔轉換為中文文檔)。
 
8、匿名者
 
匿名者代理會主動從HTTP報文中刪除身份特性(比如客戶端IP地址、From首部、Referer首部、cookie、URI的session ID等),提高高度的私密性和匿名性。

 

 

四、代理服務器的位置

1、出口代理
將代理固定在本地網絡的出口點,以便控制本地網絡與互聯網之間的流量。
 
2、訪問入口代理
代理常被放在ISP(Internet Server Provider)互聯網服務提供商訪問點上,用以處理來自客戶的聚合請求。ISP使用緩存代理來存儲常用的文檔副本,以提高用戶的下載速度,降低互聯網帶寬耗費。
 
3、反向代理
代理通常會被部署在網絡邊緣,在Web服務器之前,作為替代物(反向代理)使用,它們可以處理所有傳送給Web服務器的請求,並只在必要時向Web服務器請求資源。
 
4、網絡交換代理
可以將具有足夠處理能力的代理放在網絡之間的互聯網對等交換點上,通過緩存來減輕互聯網節點的擁塞,並對流量進行監視。

  

五、代理的層級結構

 
可以通過代理層次結構將代理連接起來,代理層次結構的應用場景有:
 
1)負載均衡
子代理可能會根據當前父代理上的工作負載來決定如何選擇一個負載均衡,達到負載均衡的作用
 
2)地理位置附近的路由
子代理可能會選擇負責原始服務器所在物理區域的代理
 
3)協議/類型路由
子代理可能會根據URI將報文轉發到不同的父代理和原始服務器上去
 
4)基於訂購的路由
如果發佈者為高性能額外付費了,他們的URI就會被轉發到大型緩存或壓縮引擎上去,以提高性能。
 

六、如何使客戶端走向代理

客戶端通常會直接與Web服務器進行通信,如何使得客戶端的流量流向代理
 
1)修改客戶端
 
將客戶端配置為代理服務器,客戶端就會將HTTP請求有意地直接發送給代理,而不是原始服務器。
 
 
2)修改網絡
 
網絡基礎層設施通過若干技術手段,在客戶端不知道或沒有參與的情況下,攔截網絡流量並將其導入代理。
 
3)修改DNS的命名空間
 
放在Web服務器的代理服務器(反向代理),會直接假扮Web服務器的名字和IP地址,這樣所有的請求就會發送給這些反向代理服務器,而不得Web服務器。
 
4)修改Web服務器
 
將某些Web服務器配置為向客戶端發送一條HTTP重定向命令(響應碼305),將客戶端請求重定向到一個代理上去,收到重定向命令後,客戶端會與代理服務器進行通信。
 
 

七、追蹤報文

1、Via首部
 
Via首部字段列出了與報文途徑的每個中間節點有關的信息,報文每經過一個節點,都必須將這個中間節點添加到Via列表的末尾。
Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com

 

Via首部字段用於記錄報文的轉發,診斷報文循環,標識請求、響應鏈上所有發送者的協議能力。

 

 
2、Via的語法
 
Via首部字段包含一個由逗號分隔的路標,每個路標都表示一個獨立的代理服務器或網關。Via包括四個組件,一個可選的協議名(默認為HTTP),一個必選的協議版本,一個必選的節點名和一個可選的描述性注釋。
Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com

 

3、Via的請求和響應路徑
 
請求和響應報文都會經過代理進行傳輸,因此請求和響應報文中都要有Via首部。請求和響應通常都是通過同一條TCP連接傳送的,所以響應報文沿着與請求報文相同的路徑回傳。

 

4、Via與網關
 
有些代理會為非使用HTTP協議的服務器提供網關的功能,Via首部記錄了這些協議的轉換。
 
 
5、Trace方法
 
代理服務器可以在轉發報文時對其進行修改。可以添加、修改或刪除首部,也可以將主體部分轉換成不同的格式。通過HTTP/1.1的TRACE方法,用戶可以跟蹤代理鏈傳輸的請求報文,觀察報文經過了哪些代理,以及每個代理是如何對請求報文進行修改的。
 

八、學習交流

歡迎大家關注我的公眾號,一起交流、學習。