`
aaronchenwei
  • 浏览: 8237 次
文章分类
社区版块
存档分类
最新评论

Proxy auto-config(PAC)配置

 
阅读更多
Proxy auto-config,简称PAC,是用于定义浏览器如何自动选择适当的代理服务器来访问一个网址。因此,使用PAC文件来定义代理的话,可以方便的实现
  • 实现代理的动态切换(fail-over)
  • 对于不同的url或是ip range,配置不同的server,加速网络访问速度
  • 对于proxy,可以实现负载均衡

一个PAC文件是一个至少定义了一个JavaScript函数的文本文件。这个函数FindProxyForURL(url, host)。有2个参数:url是一个对象的URL,host是一个由这个URL所指向的主机名。返回值是代理的配置。
function FindProxyForURL(url, host) {
  return "PROXY proxy.example.com:8080; DIRECT";
}

这个函数返回值告诉浏览器优先通过代理服务器proxy.example.com的8080端口来获取所有的页面。如果这个代理服务器没有反应,浏览器不使用代理服务器直接访问。多个代理之间用分号(;)分隔。

PAC函数
PAC配置可以使用一系列内置的函数。这些函数最早来源于Netscape公司出的规范。Netscape对于技术来说,是个伟大的公司,可惜的是其的商业化能力。

[list]
  • dnsDomainIs
  • Evaluates hostnames and returns true if hostnames match. Used mainly to match and exception individual hostnames.
    if (dnsDomainIs(host, ".google.com"))
        return "DIRECT";
    

  • shExpMatch
  • Will attempt to match hostname or URL to a specified shell expression, and returns true if matched.
    if (shExpMatch(url, "*.local"))
        return "DIRECT";
    

    if (shExpMatch(host, "vpn.domain.com") ||
        shExpMatch(url, "http://abcdomain.com/folder/*"))
        return "DIRECT";
    

  • isInNet
  • This function evaluates the IP address of a hostname, and if within a specified subnet returns true. If a hostname is passed the function will resolve the hostname to an IP address.
    if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
        return "DIRECT";
    

  • myIpAddress
  • Returns the IP address of the host machine.
    if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
        return "PROXY 10.10.5.1:8080";
    

  • dnsResolve
  • Resolves hostnames to an IP address. This function can be used to reduce the number of DNS lookups.
    if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
        isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
        isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
        isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
        return "DIRECT";
    

  • isPlainHostName
  • This function will return true if the hostname contains no dots, e.g. http://intranet
    Useful when applying exceptions for internal websites, e.g. may not require resolution of a hostname to IP address to determine if local.
    if (isPlainHostName(host))
        return "DIRECT";
    

  • localHostOrDomainIs
  • Evaluates hostname and only returns true if exact hostname match is found.
    if (localHostOrDomainIs(host, "www.google.com"))
        return "DIRECT";
    

    这可以包括google.com所以子的domain。
    if (localHostOrDomainIs(host, ".google.com"))
        return "DIRECT";
    

  • isResolvable
  • Attempts to resolve a hostname to an IP address and returns true if successful. WARNING – This may cause a browser to temporarily hang if a domain isn’t resolvable.
    if (isResolvable(host))
        return "PROXY proxy1.example.com:8080";
    

  • dnsDomainLevels
  • This function returns the number of DNS domain levels (number of dots) in the hostname. Can be used to exception internal websites which use short DNS names, e.g. http://intranet
    if (dnsDomainLevels(host) > 0)
        return "PROXY proxy1.example.com:8080";
        else return "DIRECT";
    

  • weekdayRange
  • Allows rules to be time based, e.g. only return a proxy during specific days.
    if (weekdayRange("MON", "FRI")) return "PROXY proxy1.example.com:8080";
        else return "DIRECT";
    

  • dateRange
  • Allows rules to be time based, e.g. only return a proxy during specific months.
    if (dateRange("JAN", "MAR")) return "PROXY proxy1.example.com:8080";
        else return "DIRECT";
    

  • timeRange
  • Allows rules to be time based, e.g. only return a proxy during specific hours.
    if (timeRange(8, 18)) return "PROXY proxy1.example.com:8080";
        else return "DIRECT";
    

  • alert
  • The alert() function is not specified in the original PAC specification, although support for this is included in Internet Explorer and Firefox.The function can be used to output the value of a variable or result of a function in a manner that is viewable by the end-user. This can be useful for troubleshooting PAC file rule issues.
    resolved_host = dnsResolve(host);
    alert(resolved_host);
    


    [/list]

    注意
    Firefox或Internet Explorer只支持系统缺省编码的PAC文件,不支持Unicode编码的PAC文件,所以在编写PAC文件的时候要注意文件的编码方式。
    分享到:
    评论

    相关推荐

      Navigator Proxy Auto-Config File Format 导航代理自动配置文件格式

      - 需要配置服务器将 `.pac` 文件映射到 MIME 类型 `application/x-ns-proxy-autoconfig`。 - 如果使用的是Netscape服务器,编辑 `config` 目录下的 `mime.types` 文件。 - 如果使用 Apache、CERN 或 NCSA 服务器,...

      PACtory Proxy Auto Config Generator-开源

      它的主要功能是生成Proxy Auto-Config(PAC)文件,这种文件格式被广泛用于指导浏览器如何根据指定的规则选择正确的代理服务器进行网络访问。PAC文件通常称为"Windows代理自动检测"或"wpad.dat",它能够根据用户的...

      proxy4safari-pac-file:个人配置文件

      标题 "proxy4safari-pac-file:个人配置文件" 指的是一个专门针对Safari浏览器的代理配置文件,这种文件通常使用JavaScript编写,并被称为PAC(Proxy Auto-Config)文件。PAC文件的主要功能是自动配置用户的网络代理...

      pac文件自动配置网络

      PAC(Proxy Auto-Config)文件是一种用于自动配置网络的文件。它是一种使用 JavaScript 语言编写的文本文件,用于指定在访问特定网址时应使用哪个代理服务器或直接连接。PAC 文件主要用于在企业和组织网络中实现代理...

      proxy-pac:pac文件生成

      标题"proxy-pac:pac文件生成"指的是关于代理自动配置(Proxy Auto-Config,简称PAC)文件的生成过程。PAC文件是一种基于JavaScript的文本文件,用于定义网络客户端如何选择合适的代理服务器进行网络访问。这个过程...

      proxy_resolver_v8.rar_proxy pac

      标题中的"proxy_resolver_v8.rar_proxy pac"表明这是一个与网络代理设置相关的项目,特别是涉及到使用V8 JavaScript引擎来解析和执行Proxy Auto-Config(PAC)脚本的实现。PAC脚本是一种自动代理配置方式,它允许...

      android studio 在线升级pac代理

      "android studio 在线升级pac代理"这个主题就是关于如何在更新Android Studio时,通过使用PAC(Proxy Auto-Config)脚本来提高下载速度。PAC代理是一种自动配置代理服务器的方式,它可以智能地选择最快速的网络路径...

      easy-proxy-chrome-ext:微小的Chrome扩展程序,可即时更改PAC脚本

      标题中的“easy-proxy-chrome-ext”是一个Chrome浏览器扩展程序,主要功能是简化PAC(Proxy Auto-Config)脚本的管理和应用。PAC脚本是一种自动化代理设置的配置文件,通常由网络管理员或用户用来根据特定规则(如...

      PorxyPac:用于Mac自动代理的pac发布服务

      ProxyPac是针对Mac用户的一款自动代理解决方案,它利用PAC(Proxy Auto-Config)文件来智能化地管理网络代理设置。PAC文件是一种基于JavaScript的脚本,它定义了如何根据URL选择合适的代理服务器。在Mac系统中,可以...

      Change Proxy Fastest-开源

      此外,该工具支持通过代理 PAC(Proxy Auto-Config)文件进行自动配置。PAC 文件是一种文本文件,包含了一段 JavaScript 代码,用于根据用户访问的 URL 自动选择合适的代理服务器。这种自动配置方式使得用户无需手动...

      Set browser Proxy

      4. **自动配置脚本**:某些情况可能需要使用PAC(Proxy Auto-Config)文件,这是一个JavaScript脚本,它告诉浏览器如何根据URL选择正确的代理服务器。用户只需输入PAC文件的URL,浏览器会自动处理剩下的设置。 5. *...

      httpproxy

      "工具"标签则意味着可能讨论了与HTTP代理相关的实用工具,比如PAC(Proxy Auto-Config)文件生成器、代理检测工具、性能测试工具等。这些工具可以帮助用户更方便地管理和使用HTTP代理,提高工作效率。 在压缩包子...

      HTTP核心模块(HTTP Core).docx

      比如,当处理/proxy.pac或/wpad.dat时,可以设置为`default_type application/x-ns-proxy-autoconfig;`,确保正确识别JavaScript Proxy Auto-Config (PAC)文件。 最后,`directio`指令控制是否启用直接I/O模式,这...

      Internet connection proxy setup

      这个地址可能是一个PAC(Proxy Auto-Config)文件,它包含了代理服务器的规则和配置,浏览器会根据这个文件自动决定是否以及如何通过代理服务器进行网络访问。 输入代理服务器地址后,确保“端口”字段正确无误,...

      pacgen:代理Pac文件生成器,将pac文件作为Web服务器

      "Pacgen"是一个代理PAC(Proxy Auto-Config)文件生成器,它允许用户将PAC文件作为Web服务器来使用。PAC文件是一种脚本格式,主要用于自动配置网络代理设置,使得客户端(如浏览器)能根据指定的规则智能地选择是否...

      Portfolio_update-2_PAC

      【标题】"Portfolio_update-2_PAC"是一个项目更新,可能是个人或团队的作品集,它涉及到PAC(可能指的是“Programmable Automation Controller”或“Proxy Auto-Config”),并且与HTML技术有关。这个更新可能是在...

      yskproxy-crx插件

      yskproxy-crx插件是一款专为英语用户设计的浏览器扩展程序,旨在提供一种简便高效的方式来管理和切换网络的PAC(Proxy Auto-Config)代理配置。这款插件的核心功能在于帮助用户在不同代理设置之间轻松切换,包括使用...

      Proxy Settings Detection Library-开源

      在libproxydetect的设计中,它考虑了多种代理类型,包括HTTP、SOCKS4、SOCKS5等,以及PAC(Proxy Auto-Config)文件的支持。PAC文件是一种脚本语言,通常由网络管理员用来自动选择最佳的代理服务器,libproxydetect...

      MIME Type 常見的格式類型列表

      - **application/x-ns-proxy-auto-config**: NS Proxy Auto Config文档,扩展名为`.pac`。 - **application/x-pixelscooter**: Pixelscooter文档,扩展名为`.mpp`。 - **application/x-sh**: Shell脚本,扩展名为`....

      pac-wpad-editor:Web界面,用于简单的.PAC文件管理

      标题中的“pac-wpad-editor”是一个专为管理.PAC(Proxy Auto-Config)文件设计的Web界面工具。PAC文件是自动代理配置文件,通常用于网络环境中,它们定义了浏览器如何选择适当的代理服务器来访问互联网资源。这个...

    Global site tag (gtag.js) - Google Analytics