自制的 PAC 测试页有两个输入框,分别标注为 Host 和 URL。按钮按下时按这个顺序传值。遗憾的是,PAC 函数期望的却是相反的顺序。

FindProxyForURL(url, host)

以一个示例目标为例,调用应当是这样的:

FindProxyForURL("https://status.office.example/", "status.office.example")

第二个参数是主机名,不含协议、路径和端口。当测试框架在那里传入完整 URL 时,把 host 与已知名称比较的规则就不会命中。

两个入参都是字符串,所以 JavaScript 并不一定抛出错误。脚本会悄悄走到最后的 return,并显示一个看起来合理的代理。正因如此,这个缺陷特别容易被误判成糟糕的域名规则。

先查调用,再改规则

读一读测试框架里的函数调用,检查边界上的这两个值。然后拿一个已知的精确主机例外,与一个应走默认路由的无关主机作对照。不要一开始就放宽例外,直到它能匹配畸形输入。

即使调用修正了,评估器的辅助环境仍要单独考虑。固定的 myIpAddress() 或缺失的 DNS 辅助并不等于浏览器真实的网络状态。把这些当作独立问题。当下的修复是参数契约;下一步修复(如果需要)是让测试环境代表真正的使用者。

相关文章