PAC脚本回答浏览器该不该使用代理
PAC 是 JavaScript 函数,用来决定浏览器请求直连目标,还是交给网页代理服务器。它的函数名是 FindProxyForURL,输入里包含 url 与 host。
返回内容是字符串,可用分号连接多个选择。DIRECT 表示直连,PROXY 与 SOCKS 对应代理候选;配置时保留候选的顺序,不把返回字符串当作节点订阅内容。
| 读者的问题 | 对应的公开说明 |
|---|---|
| PAC由谁读取 | 读取脚本的程序,主要是浏览器 |
| 它返回什么 | 直连或代理候选的字符串 |
| 多个候选怎样使用 | 从最左边开始,连接不上再试后项 |
| 客户端规则做什么 | 对进入内核的流量匹配出口 |
| 脚本填在哪里 | 系统自动代理配置或设置脚本入口 |
如果候选列表以 DIRECT 结束,前面的代理都连接不上时会直连。检查脚本时把这个末尾选择保留,不只看最左边写了哪个代理。
内核规则回答已进入代理的请求怎样出去
规则模式按目标条件匹配出口,可以直连,也可以交给节点。全局与直连模式另有各自处理方式,浏览器读取 PAC 和代理内核采用规则不是同一个动作。
mihomo 规则按从上往下的顺序匹配,顶部优先于下面。MATCH 不带条件,承担兜底用途,不能把它与 PAC 字符串里的候选顺序混成一份列表。
PAC选择是否交给代理,内核规则决定代理收到请求后的出口。
这两处都可能出现直连字样,但字样相同不代表所处阶段相同。核对某个请求时先确定正在看浏览器脚本,还是已进入代理程序后的规则。
系统脚本入口与订阅入口要分开找
Windows 代理设置里有使用设置脚本的项目,填写脚本地址。macOS 的代理选项里有自动代理配置,v2rayN 系统代理菜单则列有 PAC 模式。
这些入口用于 PAC,不是把机场订阅地址直接当作脚本使用的说明。订阅返回什么格式要读对应客户端文档,不能只因两者都使用地址就互相替换。
- 找到应用实际使用的代理方式,确认是否读取 PAC。
- 查看 PAC 函数与候选返回顺序,记录直连条件。
- 再看客户端当前模式与规则,区分请求进入前后的处理。
读取脚本时保留文件形态和浏览器条件
PAC 文件扩展名为 .pac,文件里放对应函数,不嵌入 HTML。它与网页正文、订阅清单各有内容形态,查看时先认清对象再解释规则。
- 函数输入看 url 和 host,返回项看代理或直连。
- 多项候选按先后读取,末尾直连也属于行为条件。
- HTTPS 地址传给 PAC 时会去掉路径与查询部分,不能按完整地址想象匹配。
Chrome 75 起不能关闭上述去除行为,Firefox 有相应偏好项。涉及脚本条件时保留浏览器差别,不把一种浏览器的表现扩写到所有程序。
想比较服务时另看下面入口
若准备查看其他机场,可从下方继续比较收录内容。
常见问题解答
PAC里有多个代理候选时先用哪个?
按返回字符串从最左边开始,连接不上才使用后面的候选。以 DIRECT 结束时,代理都无法连接还会直连,因此检查时不能省去末尾项目。
PAC脚本地址能直接换成订阅地址吗?
两者内容用途不同,PAC 应返回用于浏览器决策的函数,订阅由对应客户端按支持格式读取。没查到公开说明允许直接互换,不能只凭都是地址就替换。
已经设了PAC还要看客户端规则吗?
要分阶段看,PAC 负责读取它的程序如何选代理,内核规则负责进入代理后的出口。相同的直连字样处在不同位置,核对时仍需看各自条件。
