Proxy 自動設定範例

這些範例是使用 Proxy 自動設定 (.pac) 檔指定自動 Proxy URL 的各種方法。若要使用這些範例,您必須將 Proxy 名稱、連接埠號碼及 IP 位址更改為與公司資訊相同的值。

本機主機直接連線

在此範例中,如果是本機主機,則它可以直接連線。不過,如果它不是本機伺服器,則它必須透過 Proxy 伺服器連線。具體而言,isPlainHostName 函式會檢查主機名稱是否有任何句點 (或點)。如果函式找到點,這代表它不是本機主機並會傳回 false。否則,函式會傳回 true。

function FindProxyForURL(url, host)
 {
 if (isPlainHostName(host))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

如果主機位於防火牆內便會直接連線

在這個範例中,如果主機位於防火牆內部,它便可以直接連線。不過,如果伺服器位於防火牆外部,則它必須透過 Proxy 伺服器連線。具體而言,localHostOrDomainIs 函式只會執行本機網域中的 URL。如果主機網域名稱符合所提供的網域資訊,則 dnsDomainIs 函式會傳回 true。

function FindProxyForURL(url, host)
 {
 if ((isPlainHostName(host) ||
 dnsDomainIs(host, ".company.com")) &&
 !localHostOrDomainIs(host, "www.company.com") &&
 !localHostOrDoaminIs(host, "home.company.com"))
 return "DIRECT";
 else
 return "PROXY proxy:80";
}

如果是可解析的主機名稱便會直接連線

在這個範例中,如果可以解析主機名稱,它便可以直接連線。不過,如果無法解析名稱,則伺服器必須透過 Proxy 伺服器連線。明確的說,此函式會要求 DNS 伺服器解析傳送給它的主機名稱。如果可以,會進行直接連線。如果不可以,則會使用 Proxy 進行連線。

當內部 DNS 伺服器用來解析所有內部主機名稱時,它會非常有用。

重要事項  

isResolvable 函式會查詢網域名稱系統 (DNS) 伺服器。物件模型物件、屬性或方法的參考會造成 Proxy 自動設定檔以無訊息模式失敗。例如,參考 window.open(...)alert(...)password(...) 都會造成 Proxy 自動設定檔失敗。

 
function FindProxyForURL(url, host)
 {
 if (isResolvable(host))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

如果主機位於指定的子網路內部便會直接連線

在這個範例中,如果本機位於指定的子網路內部,它便可以直接連線。不過,如果伺服器位於指定的子網路外部,則它必須透過 Proxy 伺服器連線。具體而言,如果主機的 IP 位址符合指定的模式,isInNet (主機、模式、遮罩) 函式便會傳回 true。遮罩會指出要比對的 IP 位址部分 (255 = 符合,0 = 略過)。

重要事項  

isInNet 函式會查詢 DNS 伺服器。物件模型物件、屬性或方法的參考會造成 Proxy 自動設定檔以無訊息模式失敗。例如,參考 window.open(...)alert(...)password(...) 都會造成 Proxy 自動設定檔失敗。

 
function FindProxyForURL(url, host)
 {
 if (isInNet(host, "999.99.9.9", "255.0.255.0"))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

根據主機網域決定連線類型

在這個範例中,如果是本機主機,則伺服器可以直接連線。不過,如果不是本機主機,則這個函式會根據主機網域判斷要使用的 Proxy。具體而言,如果使用 Shell 運算式模式時,str 符合 shexp,則 shExpMatch(str, shexp) 函式會傳回 true。

當主機網域名稱是 Proxy 選項的其中一個條件時,這就非常有用。

function FindProxyForURL(url, host)
 {
 if (isPlainHostName(host))
 return "DIRECT";
 else if (shExpMatch(host, "*.com"))
 return "PROXY comproxy:80";
 else if (shExpMatch(host, "*.edu"))
 return "PROXY eduproxy:80";
 else
 return "PROXY proxy";
 }

根據通訊協定決定連線類型

在這個範例中,使用中通訊協定會擷取自伺服器並可用來選擇 Proxy。如果找不到符合的通訊協定,則伺服器會直接連線。具體而言,substring 函式會從字串中擷取指定的字元數。

當通訊協定是 Proxy 選項的其中一個條件時,這就非常有用。

function FindProxyForURL(url, host)
 {
 if (url.substring(0, 5) == "http:") {
 return "PROXY proxy:80";
 }
 else if (url.substring(0, 4) == "ftp:") {
 return "PROXY fproxy:80";
 }
 else if (url.substring(0, 7) == "gopher:") {
 return "PROXY gproxy";
 }
 else if (url.substring(0, 6) == "https:") {
 return "PROXY secproxy:8080";
 }
 else {
 return "DIRECT";
      }
 }

根據符合 IP 位址的主機名稱決定 Proxy 伺服器

在這個範例中,透過將主機名稱轉譯成 IP 位址,然後將該位址與指定的字串進行比較的方式來選取 Proxy 伺服器。

重要事項  

dnsResolve 函式會查詢 DNS 伺服器。物件模型物件、屬性或方法的參考會造成 Proxy 自動設定檔以無訊息模式失敗。例如,參考 window.open(...)alert(...)password(...) 都會造成 Proxy 自動設定檔失敗。

 
function FindProxyForURL(url, host)
 {
 if (dnsResolve(host) == "999.99.99.999") { // = http://secproxy
 return "PROXY secproxy:8080";
 }
 else {
 return "PROXY proxy:80";
 }
 }

如果主機 IP 位址與指定的 IP 位址相符,則使用 Proxy 伺服器進行連線

在這個範例中,透過明確取得 IP 位址,然後將該位址與指定的字串進行比較的方式來選取 Proxy 伺服器。如果找不到符合的通訊協定,則伺服器會建立直接連線。具體而言,myIpAddress 函式會傳回執行瀏覽器的主機 IP 位址 (以整數點格式表示)。

function FindProxyForURL(url, host)
 {
 if (myIpAddress() == "999.99.999.99") { 
 return "PROXY proxy:80";
 }
 else {
 return "DIRECT";
 }
 }

如果主機名稱包含點,則使用 Proxy 伺服器進行連線

在這個範例中,函式會檢查主機名稱是否有句點 (或點)。如果有任何點存在,就會使用 Proxy 伺服器進行連線。如果不含任何點,就會進行直接連線。具體而言,dnsDomainLevels 函式會傳回等於主機名稱中的點數目的整數。

注意  

這是根據主機名稱特性決定連線類型的另一種方式。

 
function FindProxyForURL(url, host)
 {
 if (dnsDomainLevels(host) > 0) { // if the number of dots in host > 0
 return "PROXY proxy:80";
 }
 return "DIRECT";
 }

根據一週的特定天數使用 Proxy 伺服器進行連線

在這個範例中,函式會根據每週天數判斷是否要連線到 Proxy 伺服器。在指定期間以外的日期連線參數會讓伺服器建立直接連線。具體而言,weekdayRange(day1 [,day2] [,GMT] ) 函式會透過 day1day2GMT 參數,傳回目前系統時間是否落在指定的範圍內。只需要第一個參數即可。GMT 參數會假設時間值會使用格林威治標準時間,而不是本地時區。

當您要在流量很大時使用 Proxy 伺服器,但在流量很小時允許直接連線的情況下,此函式非常有用。

function FindProxyForURL(url, host)
 {
 if(weekdayRange("WED", "SAT", "GMT")) 
 return "PROXY proxy:80";
 else 
 return "DIRECT";
 }

 

 

顯示: