我正在尝试设置一个proxy.pac
可用于 IE6 客户端的文件。基本上是这样的:
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.com*")) return "DIRECT";
return "PROXY 1.2.3.4:8080";
}
该文件告诉浏览器,任何尝试访问匹配主机的客户端"*example.com*"
都应使用直接连接,否则使用代理。
这基本上在任何浏览器中都可以正常工作,但无论shExpMatch
我怎么尝试,IE6 都无法匹配。我读过这并按说明禁用缓存这里,但无济于事。
我确信 IE6 支持该shExpMatch
功能,但如果有人愿意纠正我,我很乐意听听。顺便说一句,这是在 WinXP SP2 上运行的。
答案1
这是我在客户网站上使用的经过轻微修改的 WPAD.DAT。它在 IE6 上运行良好,未经修改……(因为他们不允许我升级到 IE8)。我所做的唯一修改是隐藏客户的域名。
function FindProxyForURL(url, host) {
if ( isPlainHostName(host) ) { return "DIRECT"; }
if ( shExpMatch(url, "https:*") ) { return "DIRECT"; }
if ( shExpMatch(url,"http://*.customer.domain.com")) { return "DIRECT"; }
if ( isInNet(host,"127.0.0.1", "255.255.255.255") ) { return "DIRECT"; }
if ( isInNet(host,"10.35.0.0", "255.255.0.0") ) { return "DIRECT"; }
if ( isInNet(host,"192.168.0.0", "255.255.0.0") ) { return "DIRECT"; }
return "PROXY proxy.customer.domain.com:8080";
}
我看到的唯一区别是您没有在开头匹配“http:”,但这并不重要。
您不应该这样做,但您可以放入 alert() 语句,IE6 将显示它们。通过这样做,您可能会在调试中获得一些帮助。
答案2
我知道您已经解决了这个问题,但对于偶然发现这个问题的其他人来说,IE 中 PAC 文件中的 shExpMatch 函数存在一个限制(设计上),即仅支持 * 和 ? 正则表达式通配符。另一种方法是使用正则表达式对象并调用其上的测试方法,传入 host 或 url 作为参数:
var regex = /*example.com*/;
if(regex.test(host))
return "DIRECT";
return "PROXY 1.2.3.4:8080";