proxy.pac 中的 shExpMatch 和 Internet Explorer 6

proxy.pac 中的 shExpMatch 和 Internet Explorer 6

我正在尝试设置一个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";

相关内容