简短名称的 PAC 规则可能绕过代理
了解为什么无点主机名与其完全限定形式会在同一 PAC 脚本中选择不同路由。
PAC 脚本从 URL 接收主机名。dashboard 在匹配前不会自动变成 dashboard.example.internal:
function FindProxyForURL(url, host) {
if (isPlainHostName(host)) {
return "DIRECT";
}
return "PROXY 203.0.113.10:8080";
}
请用真实的 HTTP 端点替换示例地址;HTTP 代理列表 为该路由允许的公共目标测试提供候选。在这个脚本中,简短名称会刻意返回 DIRECT;完全限定名称才会进入代理分支。“纯主机名”指没有点号的写法,并不表示该主机位于受信任的本地网络。
如果期望的策略是某一个内部域,就匹配该域,而不是匹配所有简短名称。dnsDomainIs 与 shExpMatch 的输入和模式语义不同。对 .example.internal 的后缀检查不包含精确的根 example.internal;如有需要,请显式包含该情形。shell 风格的模式不是 IP 子网,也不是正则表达式。
比较脚本对简短名称、完全限定名称、一个无关的公共主机以及任何预期域根的结果。这样无需连接代理即可测试规则选择。当宽泛的 DIRECT 分支导致本可到达的端点无法尝试时,请检查第一个返回的规则。
如果名称比较能表达策略,就使用它;DNS 辅助函数会带来各自的查询和延迟。也要把浏览器的隐式本地绕过与脚本区分开。localhost 检查不能代替真实的公共或内部目标写法。