代理自动配置文件PAC

摘要:
PAC文件包含JavaScript函数“FindProxyForURL”,该函数可以返回包含一个或多个访问规则的字符串。浏览器或其他应用程序可以基于该字符串确定要使用哪个代理服务器。PAC维基百科描述:单击查看官方网站上的函数描述:单击以查看PAC文件的简单格式:functionFindProxyForURL{if{return“PROXY127.0.1:8080”;}}2。PAC文件可以使用FunctionsPAC文件可以分析用户的URL地址来分配不同的代理服务器,不同的函数可以做出不同的判断。这可用于纠正PAC文件错误。
代理自动配置文件PAC

来源 https://zhuanlan.zhihu.com/p/31287042

chrome://net-export/
chrome://net-internals/#proxy
chrome://net-internals/#events
https://netlog-viewer.appspot.com/

https://github.com/MamoruAsagami/PacTestBench
Usage: java -jar build/libs/PacTestBench.jar [options] pac-file url-list-file [>report.txt]

注意: isInNet dnsResolve 会造成浏览器访问缓慢 

代理自动配置(Proxy auto-config,PAC),该文件定义浏览器如何自动选择适当的代理服务区来访问一个网站。一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url,host)”,该函数可返回一个包含一个或者多个访问规则的字符串。浏览器或者其他应用可根据该字符串确定使用哪个代理服务器。

PAC维基百科说明:点击查看

官网functions说明:点击查看

PAC文件简单格式:

function FindProxyForURL(url, host) {
  if(shExpMatch(url,"*.baidu.com/*")){
  return "PROXY 127.0.0.1:8080";}
}

二、PAC文件可用Functions

PAC文件可分析用户URL地址从而分配不同的代理服务器,不同的Functions可进行不同的判断。

1)dnsDomainIs

说明:如果访问的主机名(域名)匹配上,则返回true。只能使用host。

示例:

if(dnsDomainIs(host,"baidu.com")){
    return "DIRECT";}

2)shExpMatch

说明:将主机名或者URL地址与shell表达式进行匹配,成功则返回true。

示例:

if(shExpMatch(host,"baidu.com") || 
   shExpMatch(url,"http://*.sina.com/*")){
return "DIRECT";}

如果访问域名是http://baidu.com或者url地址"http://*.http://sina.com/*的,则直接进行访问

3)dnsResolve

说明:解析主机名为IP,此功能减少DNS查询次数。

示例:

if(isInNet(dnsResolve(host),"192.168.0.0","255.255.0.0"){
return "DIRECT";}

4)isInNet

说明:匹配域名(或主机)的IP地址,如果在指定子网内,则返回true。如果匹配的是主机名,该函数会将该主机名解析为IP

示例:

if(isInNet(host,"192.168.21.0","255.255.255.0") || 
   isInNet(dnsResolve(host),"192.168.21.0","255.255.255.0")){
return "DIRECT";}

5)myIpAddress

说明:返回本地主机的IP

示例:

if(isInNet(myIpAddress(),"192.168.107.0","255.255.255.0")){
return "PROXY 127.0.0.1:8080";}

6)isPlainHostName

说明:如果主机名中不包含点(.),则返回true。该函数只用于host

示例:

if(isPlainHostName(host)){
return "DIRECT";}

7)localHostOrDomainIs

说明:只有找到确切的主机名,才返回true。

示例:

if(localHostOrDomainIs(host,"wenku.my.com")){
return "PROXY 127.0.0.1:90";}

访问wenku.my.com,wenku.sina.com都会返回true,使用127.0.0.1:90的代理。因为主机名是wenku。

8)isResolvable

说明:如果主机名能解析为IP,则返回true。注意:如果主机名不能解析,可能会导致浏览器暂时挂起。

示例:

if(isResolvable(host)){
return "DIRECT";}

9)dnsDomainLevels

说明:此函数会返回主机名的域级别数(.的数量)

示例:

if(dnsDomainLevels(host) > 1 && dnsDomainIs(host,"baidu.com")){
return "PROXY 127.0.0.1:90;192.168.1.21:8080";} 

10)weekdayRange

说明:允许基于“周”时间的规则。MON,TUE,WED,THU,FRI,SAT,SUN

示例:

if(weekdayRange("MON","SUN")){
return "DIRECT";}
else {
return "PROXY 127.0.0.1:90";}

11)dateRange

说明:允许基于“月”时间的规则。JAN,FEB,MARCH,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC

示例:

if(dateRange("JAN","SEP","JUN")){
return "DIRECT";}

12)timeRange

说明:允许基于“小时”时间的规则。

示例:

if(timeRange(8,18) && weekdayRange("MON","TUE")){
return "PROXY 127.0.0.1:90";}

13)alert

说明:原始PAC规范中没有这个函数,但有的浏览器是支持这个函数的。这可用用来纠正PAC文件错误。没测试成功。

示例:

if(timeRange(8,18) && weekdayRange("MON","TUE")){alert("IN Time!");}

三、注意事项

1)return 返回数据类型

DIRECT 表示无代理直接访问

PROXY Host:Port 表示通过Host:Port的proxy服务上网

SOCKS Host:Port 表示通过Host:Port的socks服务上网

2)return可进行串联

例:return "PROXY 127.0.0.1:8080; SOCKS 127.0.0.1:9090; DIRECT";

如果代理挂了或者访问超时,依次类推使用后边的配置。达到容灾目的。

3)PAC文件被访问是,返回的文件类型(Content-Type)应该为:application/x-ns-proxy-autoconfig。如果不写,浏览器也能自动识别

4)上述functions对大小写不敏感

5)dnsResolve(host)是解析出来放到自己的缓存中,不过系统中也有存在缓存数据。

6)https请求拿不到完整网址,只能使用主机名。(没做实验,这是网上评论)

========= End

免责声明:文章转载自《代理自动配置文件PAC》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇狼人杀面杀APP(FGUI教程)各种图示的介绍及绘制(boxplot、stem)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SourceTree 3.1.3 版本跳过bitbucket注册方法

https://www.cnblogs.com/fengxiaoliu/articles/11165375.html SourceTree 3.1.3 版本跳过bitbucket注册方法,而不是网上所谓的SourcetreeEnterprise跳过bitbucket注册方法。比网上其他要多一步. 1.下载并执行SourceTreeSetup-3.1.3.e...

Tomcat 下4个配置文件详解

Tomcat 的配置文件由4个 xml 文件构成,context.xml、web.xml、server.xml、tomcat-users.xml 这4个文件。每个文件都有自己的功能与配置方法,下列将逐一介绍这几个文件的配置: 一、context.xml 文件 Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件...

nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP

1. nginx 配置文件中获取源IP的配置项proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; #一般的web服务器用这个 X-Real-IP 来获取源IPproxy_set_header x-forwarded-for $proxy_add_x_forwarded_f...

新建的虚拟机如何改IP地址

1.把复制的操作系统关机 2.点击右键->管理->克隆->下一步->虚拟机当前状态->创建完整虚拟机->修改虚拟机名称 位置 3.修改主机名 4.修改主机名与ip的映射地址 5.查看硬件地址 eth1 和HWadder 00:0C........ 6.修改ip 及 eth1(原来是本机的 这里是eth0改为et...

一站式Web开发套件BeetleX.WebFamily

          BeetleX.WebFamily是一款前后端分离的Web开发套件,但它并不依赖于nodejs/npm/webpack等相关工具;而使用自身实现的方式来完成前后端分离的Web应用开发;套件以组件的方式发布,只需要在项目引用相关组件即可实现前后端分离开发,开发出来的项目可直接部署在装用.NetCore的Linux和Windows系统上。...

多台机器shell脚本:jps脚本;启动zookeeper脚本;文件分发脚本

1 查看多台机器jps脚本 1)创建vim jpsall atguigu@hadoop102:cd /opt/module/hadoop-2.8.5/bin$ 2) #!/bin/bash for ((host=102;host<105;host++)); do echo ---------------------hadoop$hos...