问:PAC是什么?
答:是Proxy Auto Config的缩写,实际上是一个JavaScript脚本。
问:PAC脚本里面有什么?
答:这个脚本包含了一个FindProxyForURL(url, host)
函数。
问:FindProxyForURL
函数有什么功能?
答:根据传入的url,可能会返回DIRECT
或PROXY proxy.example.com:8080
或类似的其他字符串,调用者可以根据这个返回的字符串选择使用一个Proxy或者不使用Proxy。
问:PAC脚本保存在哪里?
答:可以保存在任意地方。在Windows下,可以为系统配置一个全局PAC,配置在注册表的HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL
配置项中,这是一个本地路径或者网络路径,通过这个路径可以读取到PAC脚本。
问:PAC是Proxy的一部分吗?
答:不是,PAC只是一个JavaScript脚本文件,Proxy并不会读取这个JavaScript文件。
问:PAC是透明的吗?
答:不是,程序要主动读取PAC才能使用PAC。
问:哪些程序会使用系统PAC?
答:一般而言是浏览器,因为使用PAC需要一个JavaScript运行环境,简单的小程序并不具备这个条件。
上面的Q&A并不是关于“PAC和Proxy是什么关系?”的Q&A,实际上是关于“PAC是什么?”的Q&A。但是如果能弄清楚PAC到底是什么,那弄清楚PAC和Proxy的关系也不是一件困难的事情了。
关于PAC和Proxy的关系,最重要的一点是要认识到PAC并不是Proxy的一部分,虽然Proxy也可以内置分流功能,但那并不是PAC;其次要认识到,PAC并不会发起网络请求,PAC仅仅对外提供查询服务;最后是要意识到,我们大多数时候在个人电脑上配置的PAC和Proxy并不是透明的,换言之,客户端程序要主动探测并使用相关配置,PAC和Proxy才能生效。一个客户端程序可以选择使用PAC配置,也可以选择忽略PAC配置而直接连接Proxy,还可以将PAC和Proxy都忽略,直接连接远程端点。这三类客户端可以同时存在与一个系统中,就像下图的Client A、Client B和Client C那样。