我们有一个Proxy.pac文件:
function FindProxyForURL(url,host) { if (dnsResolve("ProxyServer") == "10.1.1.116") if (dnsDomainLevels(host) == 0 || isInNet(host,"10.0.0.0","255.0.0.0") || isInNet(host,"125.0.0.0","127.0.0.0","204.223.70.250","255.255.255.255") || dnsDomainIs(host,".muj.com") || dnsDomainIs(host,"sv.com.gt") || dnsDomainIs(host,"com.es.gt")) return "DIRECT"; else return "PROXY 10.1.1.116:8080"; else return "DIRECT"; }
工作正常,但由于proxy.pac部署需要很长时间,因此有很多用户抱怨因为导航.似乎dnsResolve和isInNet是问题的原因.有没有其他方法来改进这个脚本?或如何加入DNS解决?
解决方法
您的组织中是否有多个代理服务器,并且此.pac文件应该是特定于地址为10.1.1.116的服务器?如果没有,你可能只是摆脱那个检查.由于为浏览器需要进行的每个请求调用FindProxyForURL(),因此根据DNS的工作情况,dnsResolve()可能会在很长一段时间内阻止您的浏览器.
如果你需要那个dnsResolve()调用,那么解决这个问题的一种方法是将它移到FindProxyForURL()之外:
var myProxyServerIP = dnsResolve("ProxyServer"); function FindProxyForURL(url,host) { if (myProxyServerIP == "10.1.1.116") if (dnsDomainLevels(host) == 0 || isInNet(host,"com.es.gt")) return "DIRECT"; else return "PROXY 10.1.1.116:8080"; else return "DIRECT"; }
此更改将使得dnsResolve()仅在加载.pac文件时调用,而不是每次向浏览器发出请求时调用.您需要自行确定您是否可以根据地址更改的频率在您的环境中执行此操作.但同样,您的代理服务器的地址应该是静态的.
您正在使用isInNet()检查的子网是否使用dnsDomainIs()调用来检查您正在检查的域的一对一映射?如果是这样,那么你有冗余,可以删除一组呼叫.
除此之外,我根据您的问题从我能辨别出的环境中看不出任何其他建议.