"如果你有任何疑問和不滿,請和我的代理人去說",我們經常會聽到某某明星又爆出什么猛料,結果都是當事人不解釋,倒是由代理或者工作室來解釋一大堆有的沒的。
他們好像是明星的另一張嘴,替代明星完成他們自己無法完成或者不愿意完成的工作。
這里的代理是現實生活中的實體,是實實在在存在的人。
而在互聯網中,也存在著一種實體,來替代網絡實體完成它所無法完成的工作,這種網絡實體叫服務器,不過它還有一種特殊的叫法:Web 代理(proxy)。
上面的網絡實體,其實就指的是客戶端和服務器。
代理通常位于服務器和客戶端之間,扮演一種中間人的角色,在各個點之間傳遞 HTTP 報文,如果沒有代理,HTTP 客戶端就要和 HTTP 服務器進行直接對話。
那么,為什么 HTTP 客戶端不直接和 HTTP 服務器進行對話,非要在中間加一層代理呢?它能起到什么作用呢?
首先,我們大家知道,有一些國外的網站在國內是訪問不了的,但是假如我們就想訪問某同性交友網站改怎么辦呢?這里就需要使用代理了,它能夠突破自身 IP 限制,訪問國外站點。還有一些涉密公司會禁止訪問外網,那要是查資料該怎么辦呢?使用代理。
其次,代理還能夠提升網絡帶寬,加快訪問速度,代理服務器會存儲一部分帶寬,而且代理服務器內部會有一塊大的緩沖區,當訪問了某些頁面后,代理服務器就會緩存這些頁面,等下次訪問相同頁面時,代理服務器會直接返回緩沖區緩沖之后的頁面,這樣代理服務器就會把帶寬省下來的同時提高訪問速度。
代理還會隱藏你主機的真實 IP,我們也可以通過這種方法免受網絡攻擊。
總的來說,代理的功能主要有下面幾點。
私有代理和公共代理
代理服務器可以為許多客戶端提供代理服務,同時代理也可以只是某個客戶端專用的。就像教父中的湯姆軍師只為柯里昂家族服務,而像是律師事務所的大部分律師是則面向公眾服務的。所以,依據職責的不同,單個客戶端專用的代理一般被稱為私有代理,而為大多數客戶端服務的代理被稱為公共代理。
公共代理
我們見到的大部分代理服務器都是公共代理,公共代理最大的特點就是共享,但是共享也意味著風險,一般不推薦使用這種代理,不過公共代理卻有他自己獨有的優點:
- 大部分公共代理都是免費的,這意味著你可以隨意白嫖(果然免費的才香)。
- 能夠支持 HTTP 和 SOCKSv5 服務。
這里我們熟悉 HTTP 協議,那么 SOCKSv5 是個什么協議呢?我們后面會說到。
- 如果你想要從 Internet 上收集數據,那么公共代理對某些 SEO 很有用。
私有代理
專用的私有代理比較少見,但它們卻是存在,尤其是直接運行在客戶端計算機上的時候。私有代理是一個專用的 IP ,一次只能由一個客戶端使用。私有代理相比公共代理,也有一些獨特的優勢。
- 速度快,因為只有單個客戶端使用。
- 足夠安全,無需擔心隱私被泄漏的風險。
不過,不論是公共代理還是私有代理,它們都有一個共同的特性,那就是既能扮演客戶端,接受響應報文,返回響應報文;也能扮演服務器,接受客戶端請求,處理客戶端請求。
所以,代理服務器分別扮演不同的職責,完全是根據你選擇的參照物來說明的。
我們大家知道,網關是一種網絡硬件設備或網絡節點,它是網絡的入口和出口點,因為所有數據在路由之前都必須通過網關或與網關通信。網關旨在將兩個不同的網絡連接在一起,允許用戶跨多個網絡進行通信。
上面這段描述中的網關,圈重點,其實就扮演了一個代理的角色,它行使的功能就是幫助兩個異構的網絡進行通信。
不過,雖然網關能起到代理的作用,但是網關和代理服務器確實完全不同的東西。
代理和網關最大的區別就是網關不會進行數據的過濾,網關不能阻止訪問某些網站,而代理服務器的功能卻有很多。
可以這么理解,網關就是沒有過濾功能的代理服務器。
這里不得不提另外一種網絡設備,那就是防火墻,防火墻能夠也能夠過濾數據,進行安全性檢查。
嚴格來說,代理連接的是兩個或者多個使用相同協議的應用程序,依據不同的協議,代理可以分為很多種,不過我們常用的一般就下面三種代理方式。
- HTTP 代理,是我們最常見到的一種代理方式,主要是代理瀏覽器進行訪問頁面。
- SOCKS 代理,SOCKS 代理的正是 Socket,它支持多種協議,支持 HTTP 、FTP 等多種類型請求。它分SOCKS 4 和SOCKS 5兩種類型,SOCKS 4只支持 TCP 協議而 SOCKS 5支持 TCP/UDP 協議,還支持各種身份驗證機制等協議。
- SSL 代理,SSL 代理也叫做 HTTPS 代理,為了保護敏感數據在互聯網傳送中的安全性,越來越多的網站都采用 SSL 加密形式發布。
這時候可能有讀者會說了,cxuan 你講了這么多東西,那到底網關能干啥呢?能舉幾個示例嗎?
來了來了。
代理服務器的作用
下面我通過幾個示例來給你解釋一下代理服務器都有哪些用途和作用:
網站過濾
這是我們上面一直在講的,代理服務器能夠訪問一些網站,同時它也有過濾功能,禁止一些網站的訪問。
文檔訪問控制
可以使用代理服務器在大量的 web 服務器和 web 資源之間實現統一的訪問控制,通常用在大型企業或者分布式機構中。比如下面是三種擁有不同訪問控制權限的客戶端。
- 客戶端 A 可以無限制的訪問服務器 A 中的指定頁面。
- 客戶端 B 可以無限制的直接訪問互聯網。
- 客戶端 C 在訪問服務器 C 的加密數據之前需要輸入密碼或者憑證。
安全防火墻
代理服務器也可以充當防火墻的角色,用于限制/過濾數據的流入和流出,進行安全性檢查等。
Web 緩存
代理緩存能夠維護常用網站的本地副本,以便減少緩慢而且昂貴的因特網通信開銷。
反向代理
代理除了能夠假扮客戶端之外,它還能夠假扮服務器,這種方式被稱為反向代理。但是對于客戶端而言,反向代理服務器就相當于目標服務器,這也就是說客戶端直接訪問代理服務器就能夠直接獲得目標服務器的資源。
可以使用反向代理來提高訪問龜速 Web 服務器上公共內容時的性能。在這種配置中,通常將這些反向代理稱為服務器加速。
轉碼器
代理服務器在將內容發送給客戶端之前,修改內容的主體格式,這種對數據格式進行修改的方式就被稱為轉碼。
轉碼代理可以在傳輸 GIF 圖片時,將其轉換為 JPEG 圖片,用于減小圖片的傳輸大小,也可以對其進行壓縮等。
匿名者
匿名者顧名思義就是代理服務器隱藏客戶端特征,匿名者代理會從 HTTP 報文中刪除身份特征,比如客戶端的 IP 地址、From 首部、Referer 首部、cookie、URI 的會話 ID,提高私密性和安全性。
代理其實也像 DNS 一樣,具有層次結構,只不過 DNS 層次結構中上下級之間都是 DNS 服務器,而代理層次結構把上下級都換成了代理服務器。
代理的層次結構
在代理的層次結構中,會將報文在代理之間傳遞,一直傳遞到最終的服務器,然后再將響應報文通過代理傳回給客戶端,例如下圖是一個反向代理的層次結構。
代理層次結構中的代理服務器被賦予了父和子的關系,靠近服務器的被稱為父代理,靠近客戶端的被稱為子代理。
這是一種靜態的代理層次結構,靜態意味著這個在這個層次結構中,代理 1 總是會將報文轉發給代理 2 ,而代理 2 總是會將報文轉發給代理 3。
但是,代理的層次結構卻不一定非得是靜態的,這也就是說,在代理層次結構中,父代理和子代理都是可以改變的,下面是幾個可以動態選擇代理的方式:
- 負載均衡:子代理可以根據當前父代理的工作負載級別來選擇父代理。
- 地理位置鄰近選擇:當然也可以根據地理位置的臨近情況來選擇父代理。
- 根據協議和類型來選擇:子代理會根據 URI 將報文轉發到不同的父代理或者原始服務器上去。
客戶端的代理設置
客戶端的代理設置主要有下面四種:
- 手動設置
- 預先配置瀏覽器代理,瀏覽器廠商會在客戶端獲取瀏覽器之前預先對代理進行配置
- 自動配置代理,通過提供一個 URI,指向一個用 JS 寫的代理自動配置文件;客戶端會取回這個 JS 文件,并運行它以決定是否應該使用代理
- WPAD 代理發現,有些瀏覽器支持 WPAD 代理自動發現協議,這個協議會自動檢測出瀏覽器可以從哪個配置服務器下載到一個自動配置文件。
總結
這篇文章內容不是很多,而且也不是很復雜,適合當地鐵或者飯后讀物,五分鐘大概就能吸收文章中的內容。
原文鏈接:https://mp.weixin.qq.com/s/78LY7NNJMaVXyQv56u6BUg