หาก Jint รายงานว่าไม่มี dnsResolve หรือ myIpAddress ขณะประเมิน PAC การโหลด JavaScript เพิ่มไม่ใช่ทางแก้เสมอไป ตัวช่วย PAC เหล่านั้นเป็นส่วนหนึ่งของสภาพแวดล้อมที่แอปพลิเคชันโฮสต์จัดให้

ก่อนเรียก FindProxyForURL

เลือกชุดตัวช่วย PAC และตระกูลแอดเดรสที่รองรับ แล้วติดตั้งตัวช่วยเหล่านั้นบนเอนจิน รักษาสัญญาของตัวช่วย: dnsResolve รับชื่อโฮสต์ myIpAddress ไม่รับอาร์กิวเมนต์และต้องมีนโยบายอินเทอร์เฟซภายใน และ shExpMatch ใช้รูปแบบสไตล์เชลล์ สตับที่คืนค่าที่สะดวกอาจเลือกเส้นทางผิดโดยไม่รู้ตัว

เมื่อการเริ่มต้นนั้นเสร็จแล้ว การเรียกหลักใน 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 การตรงกับผลลัพธ์ตัวอย่างหนึ่งรายการพิสูจน์ได้น้อยกว่าการตรงกับพฤติกรรมการกำหนดเส้นทางของเบราว์เซอร์

บทความที่เกี่ยวข้อง