PAC 文件未正确过滤站点

问题描述 投票:0回答:1

场景: 我在一家公共图书馆工作,我们使用付费数据库来访问资助信息。我们 SLA 的一部分是用户必须从一个指定的 IP 地址访问该站点。用户必须身处我们的其中一个地点,并且密码不能存储在 PC 上。他们提供了三个与正常网址略有不同的地址。提供给我们的地址以“ipl”结尾。一旦我们的一位用户尝试访问它,他们的系统将验证传入的 IP 地址,如果它与我们提供的相匹配,它将授予用户访问权限。

为了实现这一点,我们决定实施一个本地代理服务器。每台 PC 都将配置为通过 .pac 文件访问代理服务器。如果用户尝试访问这三个站点中的任何一个,该文件只会将流量发送到代理服务器。所有其他流量将通过我们的常规路由器出去。

问题: 一些网站没有按预期工作。一些网站按预期代理,而另一些则没有。根据我的研究,使用 dnsDomainIs 和 shExpMatch 似乎可能存在某种类型的语法错误。例如www.cnn.comwww.tesla.comwww.yahoo.com,工作得很好。在同一个脚本中,如果我用提供的 URL 替换它们,它们将无法按预期工作。

如果我在代理服务器上的浏览器中使用这些地址,它会按预期工作。

示例脚本:

  • 最后三个站点是所提供的确切 URL。其他人只是被选中,看看他们是否会工作。
  • 我特意把代理服务器名字改成了0.0.0.0
function FindProxyForURL(url, host) {
    // Your proxy server name and port
    var proxyserver = ‘0.0.0.0:8080';
    //
    //  Here's a list of hosts to connect via the PROXY server
    //
    var proxylist = new Array(
        "www.tesla.com",
        "www.monster.com",
        "www.cnn.com",
        "www.yahoo.com",
    "https://fconline.foundationcenter.org/ipl.php",
        "https://grantstoindividuals.org",
        "https://www.guidestar.org/ipl"  
    );
    // Return our proxy name for matched domains/hosts
    for(var i=0; i<proxylist.length; i++) {
        var value = proxylist[i];
        if ( localHostOrDomainIs(host, value) ) {
            return "PROXY "+proxyserver;
        }
    }
    return "DIRECT";
}

如能提供任何帮助让此脚本正常工作,我们将不胜感激。

谢谢

javascript url proxy pac
1个回答
0
投票

您必须匹配主机名,而不是 URL。首先从要代理的 URL 中删除

https://
和 URL 路径 (
/file.ext
)。
0.0.0.0:8080
周围还有一个“智能引号”,您需要在 JavaScript 中使用纯 ASCII 单引号 (
'
)。

function FindProxyForURL(url, host) {
    // Your proxy server name and port
    var proxyserver = '0.0.0.0:8080';
    //
    //  Here's a list of hosts to connect via the PROXY server
    //
    var proxylist = new Array(
        "www.tesla.com",
        "www.monster.com",
        "www.cnn.com",
        "www.yahoo.com",
        "fconline.foundationcenter.org",
        "grantstoindividuals.org",
        "www.guidestar.org"  
    );
    // Return our proxy name for matched domains/hosts
    for(var i=0; i<proxylist.length; i++) {
        var value = proxylist[i];
        if ( localHostOrDomainIs(host, value) ) {
            return "PROXY "+proxyserver;
        }
    }
    return "DIRECT";
}

这个 PAC 文件可以简化很多。像这样的东西:

function FindProxyForURL(url, host) {

    // Your proxy server name and port
    var proxyserver = '0.0.0.0:8080'

    //
    //  Here's a list of hosts to connect via the PROXY server
    //
    var proxylist = new Set([
        "www.tesla.com",
        "www.monster.com",
        "www.cnn.com",
        "www.yahoo.com",
        "fconline.foundationcenter.org",
        "grantstoindividuals.org",
        "www.guidestar.org"  
    ])

    if(proxylist.has(host)) return `PROXY ${proxyserver}`
    return "DIRECT";
}
© www.soinside.com 2019 - 2024. All rights reserved.