1. 程式人生 > >企業IT管理員IE11升級指南【15】—— 代理自動配置指令碼

企業IT管理員IE11升級指南【15】—— 代理自動配置指令碼

企業IT管理員IE11升級指南 系列:

代理自動配置指令碼

Contents

簡介... 2

設計技巧... 2

處理大小寫... 2

有效利用縮排... 3

處理localhost和回送地址... 3

通過PAC遮蔽網站... 3

合理使用變數... 3

慎用isInNet, isResolveable, dnsResolve方法... 4

IE PAC結果快取... 4

使用Substrings. 4

區分Text和Numeric. 5

負載均衡proxy. 5

除錯... 6

本地PAC測試... 6

通過alert()除錯... 6

將PAC方法至於HTML頁面中除錯... 7

PAC檔案下載... 7

參考... 7

簡介

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

一個PAC檔案包含一個JavaScript形 式的函式“FindProxyForURL(url, host)”。這個函式返回一個包含一個或多個訪問規則的字串。使用者代理根據這些規則適用一個特定的代理其或者直接訪問。 當一個代理伺服器無法響應的時候,多個訪問規則提供了其他的後備訪問方法。 瀏覽器在訪問其他頁面以前,首先訪問這個PAC檔案。PAC檔案中的URL可能是手工配置的,也可能是是通過網頁的

網路代理自發現協議(Web Proxy Autodiscovery Protocol)自動配置的。

要使用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"; 

}

設計技巧

處理大小寫

有些瀏覽器對大小寫敏感,例如www.microsoft.com與WWW.MICROSOFT.COM被認為是不同的主機。如果想忽略大小寫,通常情況下可以將引數轉換為小寫之後進行使用。

var lhost = host.toLowerCase();
host = lhost; 

有效利用縮排

有效利用縮排可以提高pac檔案的閱讀性和可維護性,對於縮排一條簡單的規則是花括號之後縮排一個製表符,匹配的花括號之間對齊。

處理localhost和回送地址

localhost和回送地址(127.0.0.1)應該直接跳過代理,可以參考以下邏輯。

 if ((host == "localhost") ||
    (shExpMatch(host, "localhost.*")) ||
    (host == "127.0.0.1")) {
       return "DIRECT";
}

通過PAC遮蔽網站

通過PAC檔案可以很容易的遮蔽網站,做法是直接返回一個回送地址使得請求無法送出,這樣還可以節省客戶端到代理之間的頻寬。唯一需要注意的一點是不要將請求傳送給本地正在監聽的埠。

if (dnsDomainIs(host, ".badspyware.com") ||
    dnsDomainIs(host, ".worsespyware2.com")) {
return "PROXY 127.0.0.1:48890";
}

合理使用變數

在PAC檔案中合理定義變數可以優化執行效率,增加程式碼可讀性。例如通過以下方式定義變數myip來快取本地ip地址,這樣就避免每次都呼叫相同方法來查詢本地ip。

myip = myIpAddress();

另外一種常見的用法是將準備返回的proxy定義變數,然後隨著程式邏輯對其進行更改。

function FindProxyForURL(url, host) {
// Set the default proxy variable that users get if they don’t match
// any more specific rule. 
proxy = "PROXY coreproxy.company.com:8000";

// Los Angeles WAN subnets go to LA proxy 
if (isInNet(myIpAddress(), "10.100.0.0", "255.252.0.0")) { 
     proxy = "PROXY la-proxy.company.com:8000";
}
 
// New York WAN subnets go to New York proxy 
if (isInNet(myIpAddress(), "10.200.0.0", "255.252.0.0")) { 
     proxy = "PROXY ny-proxy.company.com:8000";
}

一般採用以上方式處理proxy時,邏輯上會先處理最通用的情況然後再處理特殊的情況,最終返回proxy的當前值給瀏覽器。

return proxy; 

慎用isInNet, isResolveable, dnsResolve方法

很多PAC開發人員經常使用isInNet(host,”a.b.c.d”)是否位於某ip段中,但是該方法的呼叫會使瀏覽器為每個主機名傳送dns反向查詢請求。如果一個網路中有很多客戶端都在傳送類似請求,將大大增加dns伺服器的負載。

IE PAC結果快取

IE的PAC處理存在一個與其他瀏覽器較大的不同之處,在於IE瀏覽器會將PAC的處理結果快取,即可以認為是對於每個host,PAC檔案只執行一次,直到下次重啟IE才會重新執行。這樣就會導致一些PAC邏輯看起來不能正常工作,例如需要通過url中的非host資訊來返回不同的代理。

IE PAC結果快取可以通過以下注冊表禁用

HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings
Value: EnableAutoproxyResultCache
Type: REG_DWORD
Data value: 0 = disable caching; 1 (or key not present) = enable automatic proxy caching (this is the default behavior)

使用Substrings

如正常的JavaScript方法一樣,可以通過使用Substring來判斷url或host中部分字串是否滿足特定條件,從而處理不同邏輯,一種比較常見的用法是判斷url使用的是那種協議,然後返回不同的代理。

if (url.substring(0,4) == "http") { 

return "PROXY http-proxy.company.com:8000"; 

}  //matches HTTP and HTTPS URLs
if (url.substring(0,3) == "ftp")  { 

return "PROXY ftp-proxy.company.com:8000"; 

}  //matches FTP:// links
if (url.substring(0,3) == "mms") { 

return "PROXY http-proxy.company.com:8000"; 

}  //matches MMS links

區分Text和Numeric

注意字串型別和數字型別的區別,例如“92”是字串,如果需要使其變為數字型別,需要呼叫parseInt方法。

numvariable = parseInt(textvar);

負載均衡proxy

很多機構內部有多個代理伺服器,但並沒有通過負載均衡器來對代理伺服器進行負載管理。通過PAC檔案可以通客戶端邏輯進行簡單的負載均衡。

// Find the 4th octet
var myip=myIpAddress()
var ipbits=myip.split(".")
var myseg=parseInt(ipbits[3])

// Check to see if the 4th octect is even or odd
if (myseg==Math.floor(myseg/2)*2) {
     // Even 
     proxy = "PROXY p1.company.com:8080; PROXY p2.company.com:8080";
}
else {
     // Odd
     proxy = "PROXY p2.company.com:8080; PROXY p1.company.com:8080";
}

除錯

PAC檔案的編寫難免需要進行測試和除錯,例如你在編寫過程中出現了JavaScript語法錯誤,或者有些方法返回了意想不到的結果。很多瀏覽器並沒有提供對於PAC指令碼除錯的支援,對於PAC檔案除錯也需要一些技巧。

本地PAC測試

有些情況下PAC檔案看上去完全沒有起作用,我們可以通過將PAC檔案下載到本地,並通過本地檔案的方式來訪問該PAC檔案進行測試。

注意在IE11中預設禁用了本地PAC檔案,進行本地PAC檔案測試需要更改以下注冊表項,

Key:   HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\
Value: EnableLegacyAutoProxyFeatures
Type:  REG_DWORD
Data:  1

通過alert()除錯

通過新增alert()方法可以有效的幫助除錯,例如myIpAddress()取得了一個錯誤的地址,通過alert方法可以很容易的發現類似問題。

if ((host =="proxyinfo.company.com")) {
    alert("Local IP address is: " + myIpAddress());
}

alert也可以幫助定位指令碼語法錯誤,例如在不同的邏輯路徑上進行alert,正確情況下會彈四個對話方塊,但最終僅僅彈出三個,那麼我們可以判斷在第三個於第四個alert之間可能存在語法錯誤。

將PAC方法至於HTML頁面中除錯

將PAC檔案的function FindProxyForURL(url, host)方法置於html頁面中然後通過瀏覽器開啟,可以很容易的發現指令碼中的語法錯誤。

<html>
<head>
<script language="JavaScript">

    Insert your ENTIRE PAC file here

</script>
</head>
<body>
test
</body>
</html>

PAC檔案下載

由於PAC檔案通常被放在一個Web伺服器上,一個常見的問題就是下載問題,判斷是否存在PAC檔案下載問題,可以通過瀏覽器直接輸入PAC地址嘗試下載來檢視是否能夠下載成功。

參考

相關推薦

企業IT管理員IE11升級指南15—— 代理自動配置指令碼

企業IT管理員IE11升級指南 系列: 代理自動配置指令碼 Contents 簡介... 2 設計技巧... 2 處理大小寫... 2 有效利用縮排... 3 處理localhost和回送地址... 3 通過PAC遮蔽網站

企業IT管理員IE11升級指南10—— 如何阻止IE11的安裝

企業IT管理員IE11升級指南 系列: 如何阻止IE11的安裝 希望自行管理更新計劃的企業和組織可以使用 IE11 Automatic Update Blocker Toolkit (自動更新攔截工具)禁止自動更新 Internet Ex

企業IT管理員IE11升級指南17—— F12 開發者工具

企業IT管理員IE11升級指南 系列: F12 開發者工具 簡介 使用 F12 開發人員工具,你可以除錯、測試網頁並加快其速度。無論你是需要微調你的 CSS 佈局還是查詢記憶體洩漏,你都能在此處找到幫助工具。 如果你正在 Inte

企業IT管理員IE11升級指南8—— Win7 IE8和Win7 IE11對比

var blobList = []; document.getElementById("pasteZone").addEventListener('paste', handlePaste, false); function handlePaste(evt) { var fileLis

企業IT管理員IE11升級指南16—— 使用Compat Inspector快速定位IE相容性問題

使用Compat Inspector快速定位Internet Explorer相容性問題 Compat Inspector介紹 Compat Inspector是一個基於JavaScript的,用於快速分析網站在新版本Internet Explorer中相容性問題的,自動化掃描工具。 不同於其他大而

企業IT管理員IE11升級指南1—— Internet Explorer 11增強保護模式 (EPM) 介紹

企業IT管理員IE11升級指南 系列: Internet Explorer 11增強保護模式 (EPM) 介紹 每個Internet Explorer的新版本,都會引入新的安全增強機制,以幫助使用者更安全地瀏覽Internet。增強保護模

企業IT管理員IE11升級指南14—— IE11代理伺服器配置

企業IT管理員IE11升級指南 系列: IE11代理伺服器配置 自動檢測配置 WPAD代表Web Proxy Auto-Discovery Protocol,是客戶端通過DHCP或DNS協議探測代理伺服器配置指令碼url的一種方式。

企業IT管理員IE11升級指南2—— Internet Explorer 11 對Adobe Flash的支援

企業IT管理員IE11升級指南 系列: Internet Explorer 11 對Adobe Flash的支援 在Windows 8.1上,Adobe Flash被作為一個平臺功能包括在內,可運行於Internet Explorer

企業IT管理員IE11升級指南7—— Win7和Win8.1上的IE11功能對比

企業IT管理員IE11升級指南 系列: Win7和Win8.1上的IE11功能對比 在 HTML5 視訊、觸控支援、裝置和螢幕方向 API、Windows 整合和效能方面,Windows 8.1 上的 Internet Explorer 

企業IT管理員IE11升級指南6—— Internet Explorer 11面向IT專業人員的常見問題

企業IT管理員IE11升級指南 系列: Internet Explorer 11面向IT專業人員的常見問題 1.   Internet Explorer 11 在哪個作業系統上執行? • Windows 8.1 • Windows

企業IT管理員IE11升級指南4—— IE企業模式介紹

企業IT管理員IE11升級指南 系列: IE企業模式介紹 企業模式,執行在Windows8.1 Update和Windows7 Internet Explorer 11上的相容模式,讓網站使用一種模仿Internet Explorer

企業IT管理員IE11升級指南13—— 如何把IEMP遷移到GPP

企業IT管理員IE11升級指南 系列: 如何把IEMP遷移到GPP 背景 Internet Explorer Maintenance (IEM) 從Internet Explorer 10以後就已取消。安裝Internet Expl

企業IT管理員IE11升級指南12—— 相容檢視列表介紹

 企業IT管理員IE11升級指南 系列: 相容檢視列表介紹 為過去版本Internet Explorer設計的網站並不總是能夠在當前版本的Internet Explorer中得到預期的顯示效果。為了解決這個問題,Internet Expl

企業IT管理員IE11升級指南5—— 不跟蹤(DNT)例外

企業IT管理員IE11升級指南 系列: 不跟蹤(DNT)例外 不跟蹤(DNT)簡介 始終傳送“請勿跟蹤”標題 (DNT是Do Not Track header的縮寫),是在IE11新增的GPO設定,可以在以下路徑找到: 管理模板\Wi

企業IT管理員IE11升級指南11—— 通過SCCM 2012和WSUS部署Internet Explorer 11

企業IT管理員IE11升級指南 系列: 通過SCCM 2012和WSUS部署Internet Explorer 11 部署Internet Explorer的先決條件 Internet Explorer 11已預設安裝在Windows

企業IT管理員IE11升級指南9—— IE10與IE11的功能對比

企業IT管理員IE11升級指南 系列: IE10與IE11的功能對比 Contents

企業IT管理員IE11升級指南3—— IE11 新的GPO設定

企業IT管理員IE11升級指南 系列: IE11 新的GPO設定 MSDN文件詳細介紹了IE11新增的組策略 Internet Explorer 11 的新組策略設定 在DC上,如果IT管理員不希望安裝IE11但需要配置Int

Linux開機自動啟動指令碼

  Linux下(以RedHat為範本)新增開機開機自動啟動指令碼有兩種方式;   本例系統:Linux(CentOS 7.2) 方法一   使用 /etc/rc.d/rc.local,自動啟動指令碼 1 #!/bin/bash

用友U9 SOA引領企業IT架構全面升級

管理大師德魯克在其著作《變動中的管理》一書中指出,面對越來越複雜多變的經濟環境,任何一家企業想要實現自己的管理模式和業務架構都離不開IT技術的支援。這是由於大多數的企業核心流程都必須由IT支援,才能實現。這就導致IT應用的效率必然會影響企業運營的效率。因此,經濟危機後優化企業的IT架構和應用是企業復甦的必行

15vuex2.0 之 modules

his 來看 暴露 方式 ets 我們 spa web space   vue 使用的是單一狀態樹對整個應用的狀態進行管理,也就是說,應用中的所有狀態都放到store中,如果是一個大型應用,狀態非常多, store 就會非常龐大,不太好管理。這時vuex 提供了另外一種方式