移动体验 / 方法解读

移动端内网域名无法解析?检查 PAC 文件中的 isResolvable 函数

当移动端设备无法访问内网域名时,应检查 Proxy Auto-Configuration 文件中 FindProxyForURL 函数是否正确调用了 isResolvable 函数。

转发节点系统架构参考图,展示网络节点连接结构
主题资料配图,非新闻现场照片 · 配图:转发节点系统架构参考图

确认 PAC 文件是否定义了 FindProxyForURL 函数

Proxy Auto-Configuration (PAC) 文件本质上是一个包含 JavaScript 函数的文本文件,用于自动决定浏览器的请求路径。该文件必须保存为 .pac 扩展名,并且 MIME 类型应设置为 application/x-ns-proxy-autoconfig。文件的核心内容是一个名为 FindProxyForURL 的函数,浏览器在发起请求时会调用此函数并传入 URL 和主机名作为参数。如果文件内容不包含这个函数,或者函数定义不完整,浏览器将无法根据规则自动选择直连或代理,导致内网域名解析失败。

在检查 PAC 文件时,首先确认文件头部是否声明了正确的 MIME 类型。接着,使用文本编辑器打开文件,查找 function FindProxyForURL(url, host) 这一行。如果找不到该函数,或者函数体为空,那么浏览器将无法执行任何代理逻辑。确保函数定义完整且语法正确是解决内网域名访问问题的第一步。

验证函数逻辑中是否调用了 isResolvable 函数

PAC 文件中的 FindProxyForURL 函数通常包含逻辑判断,以决定是让浏览器直接访问目标主机,还是通过代理服务器转发请求。一个常见的场景是,当内网 DNS 服务器只能解析内部主机名时,需要编写逻辑来区分可解析和不可解析的域名。isResolvable 函数是 PAC 规范中提供的内置函数,用于测试主机名是否可以被解析。如果函数逻辑中没有调用 isResolvable,那么浏览器将无法区分内网和外网域名,可能导致内网请求被错误地转发到代理服务器,或者外网请求被错误地直连。

检查函数逻辑时,重点查看 return 语句之前的条件判断部分。如果代码中存在类似 if (isResolvable(host)) 的判断,说明函数试图利用 DNS 解析能力来决定路由。如果缺少这一步,或者使用了其他不可靠的方法(如硬编码域名列表)来替代,那么在移动端网络环境变化时,内网访问可能会失败。确保使用 isResolvable 是实现智能路由的关键。

检查函数返回值是否符合预期路由规则

FindProxyForURL 函数的返回值决定了浏览器的最终行为。根据 PAC 规范,返回字符串 DIRECT 表示直连,返回字符串 PROXY host:port 表示通过指定代理服务器连接。在处理内网域名时,正确的逻辑通常是:如果主机名可解析,则直连;否则,走代理。如果函数返回了错误的指令,例如对可解析的内网域名返回了 PROXY,那么浏览器将尝试通过代理访问内网,这通常会失败,因为代理服务器通常无法解析内网域名。

可以通过模拟测试来验证返回值。假设内网 DNS 只能解析 example.internal,外部域名无法解析。正确的 PAC 逻辑应返回 DIRECT 给 example.internal,返回 PROXY proxy.example.com:8080 给外部域名。如果函数返回了相反的结果,或者返回了空值,那么内网访问将无法建立。检查返回值是确认 PAC 配置生效的最终步骤。

使用浏览器开发者工具验证 PAC 文件加载情况

在移动端浏览器中,可以通过开发者工具的配置页面加载 PAC 文件,以验证其是否被正确识别和执行。在 Chrome 或 Firefox 的移动调试模式下,找到网络代理设置,输入 PAC 文件的 URL。如果 PAC 文件有效,浏览器通常会显示“已配置”或类似的提示。如果显示错误或无法加载,说明 PAC 文件路径错误、服务器不可访问或文件内容有误。

加载 PAC 文件后,可以进一步检查网络请求。在开发者工具的 Network 面板中,查看对内网域名的请求。如果请求被发送到了代理服务器的端口(如 8080),说明 PAC 逻辑可能错误地选择了代理。如果请求直接发送到了目标 IP,说明 PAC 逻辑正确地选择了直连。通过实际的网络请求路径,可以直观地验证 PAC 文件中 FindProxyForURL 函数的执行结果。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. Proxy servers and tunneling - HTTP | MDN ↗
  2. 配图:转发节点系统架构参考图 ↗
← 更多移动体验文章返回顶部 ↑