首先,我们一定要知道什么是
Proxy
?他的功用是什么?如果还不知道,可以参照
这份文件
。
而
PAC(Proxy Auto Config)
又是什么呢?它实际上是一个
Script
;经由编写这个
Script
,我们可以让系统判断在怎么样的情形下,要利用哪一台
Proxy
来进行联机。这样做主要的好处有:
1.
分散
Proxy
的流量,避免
Proxy Server
负载过高
3.
设定要求顺序,在某台
Proxy
无法联机时,可自动尝试别种联机方式
Proxy Auto Config File
的格式
基本上
Proxy Auto Config File
(以下简称
PAC
)是一个纯文字文件,他的语法采用
JavaScript
;所以建议要学习编写
PAC
的人,最好先学习基本的
JavaScript
。一个
PAC
档必需是单独的
JavaScript
,其中不能包含任何
HTML
标签。
在
PAC
档中,一定要定义
Function FindProxyForURL
如下:
function FindProxyForURL( url, host )
如果使用了
PAC
档,则浏览器在接受我们要求的网址后,会去执行
ret = FindProxyForURL( url, host );
这样的指令。其中,
url
是所要求网址的完整路径,
host
是对方的计算机名称(就是在
://
和
/
之中的部份);而
return
值
ret
则是
Proxy
的组态,它的格式有下列三种:
·
PROXY host:port
使用指定的
Proxy
伺服机
·
SOCKS host:port
使用指定的
Socks
伺服机
比如说当浏览器得到的是
Proxy proxy.ncu.edu.tw:3128; Proxy proxy.csie.ncu.edu.tw:3128; DIRECT
的话,那浏览器会先尝试透过
proxy.ncu.edu.tw
来开启网页,如果无法使用,则尝试
proxy.csie.ncu.edu.tw
,还是不行的话,就直接联机。
在
PAC
中,除了可以使用一般
JavaScript
的
Function
外,它还定义了一些特别的
Function
可以使用:
此
Function
会判断
host
是否为不包含网域
(Domain)
。如果是,则
return true
;如果包含,则
return false
。
1. isPlainHostName("www")
会
return true
2. isPlainHostName("www.netscape.com")
会
return false
host
由网址取得的主机名称。
domain
指定的网域。
此
Function
会判断
host
是否属于网域
domain
。如果是,则
return true
;否,则
return false
。
1. dnsDomainIs("www.netscape.com", ".netscape.com")
会
return true
2. dnsDomainIs("www", ".netscape.com")
会
return false
3. dnsDomainIs("www.mcom.com", ".netscape.com")
会
return false
host
由网址取得的主机名称。
hostdom
完整的网域名称。
此
Function
会判断
host
是否为
hostdom
,或
host
是否为
hostdom
的主机名称。如果是,则
return true
;否,则
return false
。
1. localHostOrDomainIs("www.netscape.com", "www.netscape.com")
会
return true
(完全相同)
2. localHostOrDomainIs("www", "www.netscape.com")
会
return true
(主机名称相同)
3. localHostOrDomainIs("www.mcom.com", "www.netscape.com")
会
return false
(网域不同)
4. localHostOrDomainIs("home.netscape.com", "www.netscape.com")
会
return false
(主机名称不同)
此
Function
会尝试透过
DNS
去解析
host
,如果解析成功,则
return true
;否则
return false
。
1. isResolvable("www.netscape.com")
会
return true
(除非
DNS
无法正常运作)
2. isResolvable("bogus.domain.foobar")
会
return false
(除非真的冒出这个
domain
出来
…
)
host
主机名称,可以是
Domain Name
或
IP
。如果是
Domain Name
,则会透过
DNS
查出
IP
。
pattern IP
。
mask
对应于
pattern
的屏蔽。
此
Function
会
host
是否在指定的
IP
范围内,如果是,则
return true
;否则
return false
。
1. isInNet(host, "198.95.249.79", "255.255.255.255")
当
host
为
198.95.249.79
时,会
return true
。
2. isInNet(host, "140.115.0.0", "255.255.0.0")
当
host
为
140.115.*.*
时,会
return true
。
此
Function
会透过
DNS
去解析
host
,
return
值即为解析之结果。
1. dnsResolve("www.math.ncu.edu.tw")
会
return "140.115.25.9"
。
此
Function
会
return
浏览器所在计算机之
IP
地址。
此
Function
会
return host
的
Domain
层数(点的数目)。
1. dnsDomainLevels("www")
会
return 0
。
2. dnsDomainLevels("www.netscape.com")
会
return 2
。
str
要进行比对的字符串。
shexp
比对的条件。
此
Function
会比对
str
是否符合
shexp
的表示式(此表示式为
shell expression
而非
regular expressions
)。如果是,则
return true
;否则
return false
。
1. shExpMatch("http://home.netscape.com/people/ari/index.html", "*/ari/*")
会
return true
2. shExpMatch("http://home.netscape.com/people/montulli/index.html", "*/ari/*")
会
return false
这三个
Function
的功用都是检查线在时间是否在指定范围内,用这些
Function
就可以设定分时段使用
Proxy Server
。
但由于较为繁琐,如有兴趣或需要,请参考
原始文件
。
转载于:https://blog.51cto.com/myhat/420501