Конвенція PAC, що використовується основними веб-браузерами, включаючи веб-движок, полягає у використанні модифікованого синтаксису регулярних виразів. До цього часу pacmanager використовував звичайні регулярні вирази для відповідності. Ми змінюємо функцію shexpMatch, щоб використовувати відповідність, схожу на браузери.
Ця зміна означає, що RoomOS працюватиме з тими ж файлами PAC, що й інші веб-клієнти в мережі. Файли PAC, спеціально написані для RoomOS, може знадобитися оновити, щоб продовжувати працювати за призначенням.
Оцінка файлів PAC проводиться у двох окремих місцях у програмному забезпеченні RoomOS:
-
Веб-движок для власного трафіку.
-
Pacmanager для всіх інших HTTP-трафіків: HTTPFeedback, забезпечення Webex, сигналізація викликів тощо.
Файл PAC може використовувати цю функцію: shExpMatch (рядок, шаблон)
Він повертає true, якщо рядок відповідає шаблону, інакше false.
Основні відмінності між двома конвенціями перераховані нижче, причому «REGEX» означає традиційні регулярні вирази, а «BROWSER» означає конвенцію веб-браузера.
Точковий знак «.»
-
REGEX:. відповідає одному символу, який можна повторити за допомогою кількісного показника
-
БРАУЗЕР:. відповідає лише символу буквальної точки
Зірка, «*»:
-
REGEX: * є кількісним показником нуля або більше після елемента, але сам по собі нічого не відповідає
-
БРАУЗЕР: * відповідає нулю або більше символів
Знак питання «?» :
-
РЕГЕКС:? є кількісним показником нуля або один після елемента або може змінити кількісний показник *, щоб він не був жадібним, але сам по собі нічого не відповідає
-
БРАУЗЕР:? відповідає одному символу
Чи повинен відповідати весь вираз:
-
REGEX: Без використання провідних ^ та кінцевих $, PATTERN не повинен відповідати всьому STRING: Досить, щоб STRING містив підрядок, який збігається.
-
БРАУЗЕР: Завжди вимагайте, щоб STRING відповідав точно за шаблоном
Приклади
Ми хочемо зіставити всі імена хостів під «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 .