0

我正在为浏览器编写一个 .pac 文件。我希望浏览器检查我输入的网址是否符合规则。

function FindProxyForURL(url, host) {
    url=url.toLowerCase();
    host=host.toLowerCase();
    debugPAC ="PAC Debug Information\n";
    debugPAC +="-----------------------------------\n";
    debugPAC +="Machine IP: " + myIpAddress() + "\n";
    debugPAC +="Hostname: " + host + "\n";
    if (isResolvable(host)) {resolvableHost = "True"} else {resolvableHost = "False"};
    debugPAC +="Host Resolvable: " + resolvableHost + "\n";
    debugPAC +="Hostname IP: " + dnsResolve(host) + "\n";
    if (isPlainHostName(host)) {plainHost = "True"} else {plainHost = "False"};
    debugPAC +="Plain Hostname: " + plainHost + "\n";
    debugPAC +="Domain Levels: " + dnsDomainLevels(host) + "\n";
    debugPAC +="URL: " + url + "\n";
    if (url.substring(0,5)=="http:") {protocol="HTTP";}
    else if (url.substring(0,6)=="https:") {protocol="HTTPS";} 
    else if (url.substring(0,4)=="ftp:") {protocol="FTP";}
    else {protocol="Unknown";}
    debugPAC +="Protocol: " + protocol + "\n";
    if (!shExpMatch(url,"*.(js|xml|ico|gif|png|jpg|jpeg|css|swf)*")) {alert(debugPAC);}
    if(shExpMatch(url,"*://login.dangdang.com/images/bg/dataimg/dly_0807_01*"))
    {
        var noproxy=url;
        alert("noproxy4simplejpg"+noproxy);
        return "PROXY 192.168.0.101:808";
    }
    if(shExpMatch(url,"*://login.dangdang.com/script/sign_in2011.js"))
    {
        var noproxy=url;
        alert("noproxy4js"+noproxy);
        return "DIRECT";
    }
    if(shExpMatch(url,"*login.dangdang.com/*.gif*"))
    {
        var noproxy=url;
        alert("noproxy4gif"+noproxy);
        return "DIRECT";
    }
    if(shExpMatch(url,"*login.dangdang.com/*"))
    {
        var proxy=url;
        alert("proxy4login"+proxy);
        return "PROXY 192.168.0.101:808";
    }
    else
        return  "DIRECT"; 
}

问题是我想从浏览器而不是协议和主机接收完整的 url。但是现在我只能通过测试来接收urlhttps://www.login.dngdang.com/但我输入了https://www.login.dangdang.com/xxx。怎么了?

4

1 回答 1

1

我看到您的网址使用 HTTPS - https://www.login.dangdang.com/xxx

出于安全原因,浏览器默认会剥离 https:// URL 的路径和查询组件。

在 Chrome 中,您可以通过将 PacHttpsUrlStrippingEnabled 设置为 false 来禁用此功能

在 Firefox 中,首选是 network.proxy.autoconfig_url.include_path。

在代理解析期间,浏览器会在将 https:// URL 的隐私和安全敏感部分传递给 PAC 脚本(代理自动配置)之前将其剥离。

如果为 True,则启用安全功能,并在将 https:// URL 提交到 PAC 脚本之前将其剥离。以这种方式,PAC 脚本无法查看通常受加密通道保护的数据(例如 URL 的路径和查询)。

当为 False 时,安全功能被禁用,并且 PAC 脚本被隐式授予查看 https:// URL 的所有组件的能力。这适用于所有 PAC 脚本,无论其来源如何(包括通过不安全的传输获取的,或通过 WPAD 不安全地发现的)。

这默认为 True(启用安全功能)。

建议将此设置为 True。将其设置为 False 的唯一原因是它是否会导致与现有 PAC 脚本的兼容性问题。

于 2019-02-13T09:00:01.403 回答