本頁使用了標題或全文手工轉換

代理自動配置

維基百科,自由的百科全書
跳至導覽 跳至搜尋

代理自動配置(英語:Proxy auto-config,簡稱PAC)是一種網頁瀏覽器技術,用於定義瀏覽器該如何自動選擇適當的代理服務器來訪問一個網址。

一個PAC文件包含一個JavaScript形式的函數「FindProxyForURL(url, host)」。這個函數返回一個包含一個或多個訪問規則的字符串。用戶代理根據這些規則適用一個特定的代理器或者直接訪問。當一個代理服務器無法響應的時候,多個訪問規則提供了其他的後備訪問方法。瀏覽器在訪問其他頁面以前,首先訪問這個PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通過網頁的網絡代理自動發現協議(WPAD)自動配置的。

相關技術[編輯]

現代的瀏覽器實現了幾個級別的自動化;用戶可以選擇最適合他們需要的級別。下面的這些方法被普遍的實現:

  • 手動代理配置:為所有的URLs規定一個主機名和端口作為代理。大多數瀏覽器允許用戶規定一個域名的列表(例如localhost),訪問這個列表裡面的域名的時候不通過代理服務器。
  • 代理自動配置(PAC):規定一個指向PAC文件的URL,這個文件中包括一個JavaScript函數來確定訪問每個URL時所選用的合適代理。這個方法更加適合需要幾個不同代理配置的筆記型電腦用戶,或者有很多不同代理服務器的複雜的企業級設置。這個就是我們在本文中所要討論的。
  • 網絡代理自發現協議(WPAD):瀏覽器通過DHCP和DNS的查詢來搜索PAC文件的位置。

PAC文件[編輯]

要使用PAC,應當在一個網頁服務器上發布一個PAC文件,並且通過在瀏覽器的代理鏈接設置頁面輸入這個PAC文件的URL或者通過使用WPAD協議告知用戶代理去使用這個文件。

一個PAC文件是一個至少定義了一個JavaScript函數的文本文件。這個函數FindProxyForURL(url, host)有2個參數:url是一個對象的URL,host是一個由這個URL所衍生的主機名。按照慣例,這個文件名字一般是proxy.pac. WPAD標準使用wpad.dat。

雖然大多數客戶端無論從HTTP請求返回的MIME類型是什麼都能正確處理,但為了完整性和最佳的兼容性,我們應該設置網頁服務器將這個文件的MIME類型聲明為application/x-ns-proxy-autoconfig或者application/x-javascript-config。

沒有什麼理由偏愛一種MIME類型多一些,如果有的話,假設application/x-ns-proxy-autoconfig相對application/x-javascript-config被更多的客戶端所支持是可以理解的。因為它被定義在最初的Netscape規範裡面,後者是最近才開始被使用。

一個非常簡單的PAC文件內容

   function FindProxyForURL(url, host) { return "PROXY proxy.example.com:8080; DIRECT"; }

這個函數告知瀏覽器通過服務器proxy.example.com的8080端口來獲取所有的頁面。如果這個服務器沒有反應,那麼瀏覽器應該不使用代理服務器直接訪問WWW. 下面是一個更加複雜一些的例子,展示了在FindProxyForURL函數中如何使用JavaScript函數:

   function FindProxyForURL(url, host) {
      // our local URLs from the domains below example.com don't need a proxy:
      if (shExpMatch(url,"*.example.com/*"))                  {return "DIRECT";}
      if (shExpMatch(url, "*.example.com:*/*"))               {return "DIRECT";}
      
      // URLs within this network are accessed through 
      // port 8080 on fastproxy.example.com:
      if (isInNet(host, "10.0.0.0",  "255.255.248.0"))    {
         return "PROXY fastproxy.example.com:8080";
      }
      
      // All other requests go through port 8080 of proxy.example.com.
      // should that fail to respond, go directly to the WWW:
      return "PROXY proxy.example.com:8080; DIRECT";
   }

局限[編輯]

PAC文件編碼[編輯]

有些瀏覽器,例如Internet Explorer只支持系統缺省編碼的PAC文件,不支持Unicode編碼的PAC文件,例如UTF-8編碼的PAC文件。

DnsResolve[編輯]

函數dnsResolv(及其他類似函數)在執行DNS查詢時,如果DNS服務器沒有回應,這個會導致你的瀏覽器被阻塞很長時間。 Microsoft的IE5.5或更高版本瀏覽器提供的基於域名的代理自動配置緩存機制限制了PAC標準的靈活性。實際上,你是通過域名來選擇代理服務器,而不是通過URL路徑。當然,你可以通過修改註冊表的方法來關閉代理自動配置的緩存,Royne Pollard描述了這個步驟(詳見深入閱讀)。

為了兼容Windows中其他使用Internet Explorer PAC設置的組件,例如.NET 2.0框架,推薦在isInNet函數中使用IP而不是主機名。

if (isInNet(host, dnsResolve(sampledomain) , "255.255.248.0") // .NET 2.0 will resolve proxy properly

if (isInNet(host, sampledomain, "255.255.248.0") // .NET 2.0 will not resolve proxy properly

當一個PAC文件不可用的時候,當前的缺省方法是使用直接鏈接。

其他的限制與本地機器上JavaScript引擎有關。

高級功能[編輯]

有些高級的PAC文件可以在請求到達代理服務器以前通過負載平衡、故障轉移甚至黑白名單得方法減少對於代理服務器的負載。並且可以返回多個代理服務器,例如:

      return "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";

用途[編輯]

用於突破網絡審查[編輯]

PAC支持所有主流瀏覽器,如ChromeFirefoxIE。可以在瀏覽器的網絡配置里找到相關選項。

參考資料[編輯]

de Boyne Pollard, Jonathan. Automatic proxy HTTP server configuration in web browsers. Frequently Given Answers. 2004. 

外部連結[編輯]