當瀏覽網際網路的不同網路時,代理伺服器和HTTP隧道便於訪問萬維網上的內容。代理可以位於用戶的本地計算機上,也可以位於用戶計算機和Internet上的目標伺服器之間的任何位置。本頁概述了有關代理的一些基礎知識,並介紹了一些配置選項。
有兩種類型的代理:轉發代理(或隧道或網關)和反向代理(用於控制和保護對伺服器的訪問以進行負載平衡,身份驗證,解密或緩存)。
轉發代理部分
轉發代理或網關或僅「代理」向客戶端或一組客戶端提供代理服務。互聯網上可能有數十萬個開放代理。它們存儲和轉發Internet服務(如DNS或網頁)以減少和控制組使用的帶寬。
轉發代理也可以是匿名代理,允許用戶在瀏覽Web或使用其他Internet服務時隱藏其IP地址。TOR(洋蔥路由器)通過多個代理路由互聯網流量以匿名。
反向代理部分
顧名思義,反向代理與轉發代理的作用相反:轉發代理代表客戶端(或請求主機),反向代理代表伺服器行事。轉發代理可以隱藏客戶端的身份,而反向代理可以隱藏伺服器的身份。反向代理有幾個用例,其中一些是:
- 負載平衡:將負載分配給多個Web伺服器,
- 緩存靜態內容:通過緩存靜態內容(如圖片)來卸載Web伺服器
- 壓縮:壓縮和優化內容以加快載入時間。
通過代理部分轉發客戶信息
代理可以使請求看起來好像源自代理的IP地址。如果使用代理提供客戶端匿名,這可能很有用,但在其他情況下,原始請求中的信息將丟失。原始客戶端的IP地址通常用於調試,統計或生成與位置相關的內容。披露此信息的常用方法是使用以下HTTP標頭:
標準化標題:
Forwarded
- 包含代理伺服器面向客戶端的信息,當代理涉及請求路徑時,這些信息會被更改或丟失。
或者事實上的標準版本:
X-Forwarded-For
- 標識通過HTTP代理或負載平衡器連接到Web伺服器的客戶端的原始IP地址。
X-Forwarded-Host
- 標識客戶端用於連接到代理或負載均衡器的請求的原始主機。
X-Forwarded-Proto
- 標識客戶端用於連接到代理或負載均衡器的協議(HTTP或HTTPS)。
要提供有關代理本身的信息(不是關於連接到它的客戶端),Via
可以使用標頭。
Via
- 代理添加了正向和反向代理,並且可以出現在請求標頭和響應標頭中。
HTTP隧道部分
隧道通過封裝數據通過公共網路傳輸專用網路數據和協議信息。HTTP隧道正在使用更高級別的協議(HTTP)來傳輸更低級別的協議(TCP)。
HTTP協議指定了一個名為的請求方法CONNECT
。它啟動與請求的資源的雙向通信,並可用於打開隧道。這就是HTTP代理背後的客戶端如何使用SSL訪問網站(即HTTPS,埠443)。但請注意,並非所有代理伺服器都支持該CONNECT
方法或僅將其限制為埠443。
另請參閱Wikipedia上的HTTP隧道文章。
代理自動配置(PAC)部分
一個代理伺服器自動配置(PAC)文件是一個JavaScript的函數,確定網路瀏覽器的請求(HTTP,HTTPS和FTP)是否直接去目的地或轉發到Web代理伺服器。PAC文件中包含的JavaScript函數定義了函數:
應將auto-config文件保存到.pac
文件擴展名為的文件中:
proxy.pac文件
並且MIME類型設置為:
應用程序/ x-NS-代理自動配置
該文件由一個名為的函數組成 FindProxyForURL
。下面的示例將在設置內部DNS伺服器的環境中工作,以便它只能解析內部主機名,目標是僅對不可解析的主機使用代理:
function FindProxyForURL(url, host) {
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy.mydomain.com:8080";
}