Оценка на PAC в Jint: липсващи помощни функции и резултати от маршрути
Изпълнението на FindProxyForURL е една стъпка: хостът трябва да реализира PAC помощници, да ограничи изпълнението и да интерпретира върнатия списък с маршрути.
Ако Jint съобщи за липсващ dnsResolve или myIpAddress при оценка на PAC, зареждането на още JavaScript не е непременно решението. Тези PAC помощници принадлежат към средата, която предоставя хостващото приложение.
Преди извикване на FindProxyForURL
Изберете поддържания набор PAC помощници и семейства адреси, след което инсталирайте тези помощници в двигателя. Запазете техните договори: dnsResolve приема име на хост, myIpAddress не приема аргументи и изисква политика за локален интерфейс, а shExpMatch използва шаблони в стил shell. Заглушка, връщаща удобна стойност, може тихо да избере грешен маршрут.
След тази инициализация основното извикване в Jint 4.4.0 може да изглежда така:
var destination = new Uri(destinationUrl);
engine.Execute(pacSource);
var routeList = engine.Invoke(
"FindProxyForURL",
destinationUrl,
destination.IdnHost
).AsString();engine е конфигурираният Jint.Engine; pacSource е извлечената PAC програма. destination.IdnHost подава името на хоста без порт или път. Това извикване нито извлича PAC, нито отваря прокси връзка.
След извикването
Тълкувайте резултат като PROXY proxy.example:8080; DIRECT като подреден списък от кандидати за маршрут и резервен вариант. Предаването на целия низ като прокси URL губи смисъла му. Разграничавайте неуспеха при оценка от явен резултат DIRECT.
Докато работи
Конфигурирайте ограниченията на Jint за продължителност, оператори, памет и отказ, и излагайте само необходимите хост функции. Ограничете DNS обратните извиквания отделно: проверките за изпълнение на JavaScript не правят произволно блокиращо хост извикване прекъсваемо. Сериализирайте достъпа до двигател или давайте на паралелната работа отделно притежавани инстанции; двигателите не са безопасни за едновременна употреба.
Браузърните PAC реализации могат да се различават по разширения на помощниците и подробностите за URL, които разкриват, особено при HTTPS. Съвпадението с един примерен резултат доказва по-малко от съвпадението с маршрутизиращото поведение на браузъра.