主要 Web 浏览器(包括 Web 引擎)使用的 PAC 约定是使用修改的正则表达式语法。 pacmanager 一直使用普通的正则表达式进行匹配。 我们将更改 shExpMatch 函数,以使用与浏览器类似的匹配项。

此更改意味着 RoomOS 将使用与网络中其他 Web 客户端相同的 PAC 文件匹配。 专为 RoomOS 编写的 PAC 文件可能需要更新,以保持正常工作。

PAC 文件评估在 RoomOS 软件的两个单独位置完成:

  • Web 引擎用于为自己提供流量。

  • Pacmanager 用于为所有其他 HTTP 提供流量:HttpFeedback、Webex 预配置、呼叫信令等。

PAC 文件可以利用以下函数:shExpMatch(字符串、模式)

如果字符串与模式匹配,则返回 true,否则返回 false。

这两种约定的主要区别如下所示,"REGEX" 表示传统的正则表达式,“BROWSER”指 Web 浏览器约定。

点符号 "."

  • REGEX:. 匹配单个字符,可使用限定符重复

  • BROWSER:. 仅匹配字面点字符

星号 "*":

  • REGEX:* 是某个项后面零个或多个限定符,但本身不与任何内容匹配

  • BROWSER:* 匹配零个或多个字符

问号 "?":

  • REGEX:? 是某个项后面零个或一个限定符,也可以修改 * 限定符为非穷尽,但本身不与任何内容匹配

  • 浏览器:? 匹配单个字符

整个表达式是否必须匹配:

  • REGEX:不使用前导 ˆ 和尾随 $,模式不需要与整个字符串匹配:字符串包含匹配的子字符串就足够了。

  • BROWSER:始终要求按模式完全匹配字符串

示例

我们想要匹配 "provider.domain" 下的所有主机名,而不是 "otherprovider.domain"、"provider.domain.tld" 或 "providersdomain":

REGEX:

shExpMatch(url, "ˆ.*\\.provider\\.domain$")

BROWSER:

shExpMatch(url, "*.provider.domain")

我们想要匹配 "proxy1.domain"、"proxy2.domain" 等,而不是 "proxytest.domain":

REGEX:

shExpMatch(url, "ˆproxy.\\.domain$")

BROWSER:

shExpMatch(url, "proxy?.domain")

其他资源

有关 PAC 文件格式的更多详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file