Ewaluacja PAC w Jint: brakujące funkcje pomocnicze i wyniki tras
Wywołanie FindProxyForURL to jeden krok: host musi zaimplementować funkcje pomocnicze PAC, ograniczyć wykonanie i zinterpretować zwróconą listę tras.
Jeśli Jint zgłasza brak dnsResolve lub myIpAddress podczas ewaluacji PAC, ładowanie kolejnego JavaScriptu niekoniecznie jest rozwiązaniem. Te funkcje pomocnicze PAC należą do środowiska dostarczanego przez aplikację hosta.
Przed wywołaniem FindProxyForURL
Wybierz obsługiwany zestaw funkcji pomocniczych PAC i rodziny adresów, a następnie zainstaluj te funkcje w silniku. Zachowaj ich kontrakty: dnsResolve przyjmuje nazwę hosta, myIpAddress nie przyjmuje argumentów i wymaga polityki interfejsu lokalnego, a shExpMatch używa wzorców w stylu powłoki. Zaślepka zwracająca wygodną wartość może po cichu wybrać niewłaściwą trasę.
Po tej inicjalizacji główne wywołanie może wyglądać tak w Jint 4.4.0:
var destination = new Uri(destinationUrl);
engine.Execute(pacSource);
var routeList = engine.Invoke(
"FindProxyForURL",
destinationUrl,
destination.IdnHost
).AsString();engine to skonfigurowany Jint.Engine; pacSource to pobrany program PAC. destination.IdnHost podaje nazwę hosta bez portu i ścieżki. To wywołanie nie pobiera PAC ani nie otwiera połączenia przez proxy.
Po wywołaniu
Wynik taki jak PROXY proxy.example:8080; DIRECT interpretuj jako uporządkowaną listę kandydatów tras i rezerwę. Przekazanie całego tego ciągu jako adresu URL proxy gubi jego znaczenie. Utrzymuj błąd ewaluacji oddzielnie od jawnego wyniku DIRECT.
Podczas działania
Skonfiguruj ograniczenia czasu, instrukcji, pamięci i anulowania Jint oraz udostępnij tylko wymagane funkcje hosta. Ogranicz wywołania zwrotne DNS osobno: kontrole wykonania JavaScriptu nie czynią dowolnego blokującego wywołania hosta przerywalnym. Serializuj dostęp do silnika lub przydziel równoległej pracy osobno posiadane instancje; silniki nie są bezpieczne do jednoczesnego użycia.
Implementacje PAC w przeglądarkach mogą różnić się rozszerzeniami funkcji pomocniczych i szczegółami adresów URL, które udostępniają, zwłaszcza w przypadku HTTPS. Dopasowanie jednego przykładowego wyniku dowodzi mniej niż dopasowanie zachowania routingu przeglądarki.