PAC和代理配制语法

雲文 雲文

说到代理服务器Proxy Server,必然会需要如何配制代理服务器(Proxy config), 配制可以是手动的,自然,此处手动配置不是重点,我们更多的聚焦在配制的自动化(Proxy Auto-config/PAC)。

PAC

PAC的核心是个FindProxyForURL的js函数,

function FindProxyForURL(url, host) {
  // …
}

返回值为以下几种:

DIRECT
直连,无需任何代理
PROXY host:port
使用指定代理,
SOCKS host:port
使用指定的SOCK5代理服务器
HTTP host:port
指定使用HTTP代理
HTTPS host:port
使用指定的HTTPS代理
SOCKS4 host:port, SOCKS5 host:port

AutoProxy

AutoProxy的语法与PAC是不一样的,AutoProxy是衍生于ADP,它本身也其实可以看做是ADP的一个子集,

cf28f1beb0e84cf3d69fe9a7df8d2258_13582352421651

ADP定义了完整的网址规则,而用作代理设置的时候,大部份只需要关注其中的domain部份,具体的说,只需要使用到以下几条简单的

  1. "!"感叹号开头的是注释。
  2. 关键词example.com,只用于http网址的匹配,不参与匹配https协议的匹配
    • 匹配:http://www.example.com/foo 和 http://www.google.com/search?q=www.example.com
    • 不匹配 https://www.example.com/
  3. 匹配域名"||",比如:||example.com/banner.gif
    • 匹配:
      • http://example.com
      • https://example.com/banner.gif
      • http://www.example.com/banner.gif
    • 不匹配:
      • http://badexample.com/banner.gif
      • http://gooddomain.example/analyze?http://example.com/banner.gif+
  4. 匹配URL前缀"|":
    • |http://www.google.com , 这个规则匹配http://www.google.com,但是不匹配https://www.google.com
  5. 定义例外"@@",事实上,autoproxy中定义例外意味着这不需要使用proxy,直接把例外去掉既可,探讨价值大过实战价值:
    • 'adv'匹配http://example.com/advice.html,但是不希望匹配http://example.com/advice.html,那么可以定义一个例外"@@advice"。

利用autoproxy,如果配合gfwlist,以及SwitchyOmega可以完美而自由的驰骋于网络。

参考资料:

  1. Mozilla开发者文档中关于PAC的参考

  2. Archive上,Netscape关于PAC的历史存档

  3. Archive上,Calomel关于PAC的存档