Соглашение PAC, используемое основными веб-браузерами, включая Web Engine, заключается в использовании модифицированного синтаксиса регулярных выражений. До сих пор pacmanager использовал обычные регулярные выражения для сопоставления. Мы изменим функцию ShexpMatch, чтобы использовать сопоставление, аналогичное браузерам.
Это изменение означает, что RoomOS будет работать с теми же совпадениями PAC-файлов, что и другие веб-клиенты в сети. Файлы PAC, специально написанные для RoomOS, возможно, потребуется обновить, чтобы они продолжали работать должным образом.
Оценка файла PAC выполняется в двух разных местах в программном обеспечении RoomOS:
-
Веб-движок для собственного трафика.
-
Pacmanager для всего остального HTTP-трафика: HttpFeedback, подготовка Webex, сигнализация вызовов и т. д.
Файл PAC может использовать следующую функцию: shexpMatch (строка, шаблон)
Она возвращает значение true, если строка соответствует шаблону, в противном случае возвращает значение false.
Основные различия между этими двумя условными обозначениями приведены ниже: «REGEX» означает традиционные регулярные выражения, а «BROWSER» означает соглашение о веб-браузерах.
Точечный знак «.»
-
REGEX:. соответствует одному символу, который можно повторить с помощью квантификатора
-
BROWSER:. соответствует только буквальному символу точки
Звезда «*»:
-
REGEX: * — квантификатор, равный нулю или больше, после элемента, но сам по себе он ни к чему не соответствует
-
БРАУЗЕР: * соответствует нулю или более символам
Вопросительный знак «?» :
-
РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ:? представляет собой квантификатор, равный нулю или единице после элемента, или может изменить квантификатор* так, чтобы он не был жадным, но сам по себе ни с чем не сравнится
-
БРАУЗЕР:? соответствует одному символу
Должно ли все выражение совпадать:
-
REGEX: без использования начальных букв ^ и заканчивающихся цифрами $ PATTERN не обязательно совпадать со всей СТРОКОЙ: достаточно, чтобы строка содержала совпадающую подстроку.
-
БРАУЗЕР: Всегда требуйте, чтобы СТРОКА точно соответствовала PATTERN
Примеры
Мы хотим сопоставить все имена хостов в разделе «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 .