PAC-evaluatie in Jint: ontbrekende helpers en routeresultaten
FindProxyForURL aanroepen is één stap: de host moet PAC-helpers implementeren, de uitvoering beperken en de teruggegeven routelijst interpreteren.
Als Jint meldt dat dnsResolve of myIpAddress ontbreekt tijdens het evalueren van PAC, is meer JavaScript laden niet per se de oplossing. Die PAC-helpers horen bij de omgeving die de hostapplicatie levert.
Voordat je FindProxyForURL aanroept
Kies de ondersteunde set PAC-helpers en adresfamilies en installeer die helpers vervolgens op de engine. Behoud hun contracten: dnsResolve neemt een hostnaam, myIpAddress neemt geen argumenten en vereist een beleid voor de lokale interface, en shExpMatch gebruikt patronen in shellstijl. Een stub die een handige waarde teruggeeft, kan stilzwijgend de verkeerde route kiezen.
Met die initialisatie gedaan kan de kernaanroep er in Jint 4.4.0 zo uitzien:
var destination = new Uri(destinationUrl);
engine.Execute(pacSource);
var routeList = engine.Invoke(
"FindProxyForURL",
destinationUrl,
destination.IdnHost
).AsString();engine is de geconfigureerde Jint.Engine; pacSource is het opgehaalde PAC-programma. destination.IdnHost levert de hostnaam zonder poort of pad. Deze aanroep haalt geen PAC op en opent geen proxyverbinding.
Na de aanroep
Interpreteer een resultaat zoals PROXY proxy.example:8080; DIRECT als een geordende lijst van routekandidaten en fallback. De hele string als proxy-URL doorgeven, verliest de betekenis. Houd een evaluatiefout gescheiden van een expliciet DIRECT-resultaat.
Tijdens de uitvoering
Configureer Jints beperkingen voor duur, statements, geheugen en annulering, en stel alleen de vereiste hostfuncties beschikbaar. Begrens DNS-callbacks apart: controles op JavaScript-uitvoering maken een willekeurige blokkerende hostaanroep niet onderbreekbaar. Serialiseer de toegang tot een engine of geef gelijktijdig werk afzonderlijk eigendom van instanties; engines zijn niet veilig voor gelijktijdig gebruik.
PAC-implementaties van browsers kunnen verschillen in helperuitbreidingen en in de URL-details die ze blootleggen, vooral voor HTTPS. Overeenkomen met één voorbeeldresultaat bewijst minder dan overeenkomen met het routeringsgedrag van de browser.