Evaluasi PAC di Jint: helper yang hilang dan hasil rute
Menjalankan FindProxyForURL hanyalah satu langkah: host harus mengimplementasikan helper PAC, membatasi eksekusi, dan menafsirkan daftar rute yang dikembalikan.
Jika Jint melaporkan dnsResolve atau myIpAddress yang hilang saat mengevaluasi PAC, memuat lebih banyak JavaScript belum tentu menjadi solusinya. Helper PAC itu milik lingkungan yang disediakan aplikasi host.
Sebelum memanggil FindProxyForURL
Pilih kumpulan helper PAC yang didukung dan keluarga alamat, lalu pasang helper tersebut pada mesin. Pertahankan kontraknya: dnsResolve menerima nama host, myIpAddress tidak menerima argumen dan memerlukan kebijakan antarmuka lokal, dan shExpMatch memakai pola bergaya shell. Stub yang mengembalikan nilai yang nyaman dapat diam-diam memilih rute yang salah.
Setelah inisialisasi itu selesai, panggilan inti dapat terlihat seperti ini di Jint 4.4.0:
var destination = new Uri(destinationUrl);
engine.Execute(pacSource);
var routeList = engine.Invoke(
"FindProxyForURL",
destinationUrl,
destination.IdnHost
).AsString();engine adalah Jint.Engine yang dikonfigurasi; pacSource adalah program PAC yang diambil. destination.IdnHost memberikan nama host tanpa port atau jalur. Panggilan ini tidak mengambil PAC dan tidak membuka koneksi proksi.
Setelah panggilan
Tafsirkan hasil seperti PROXY proxy.example:8080; DIRECT sebagai daftar terurut kandidat rute dan cadangan. Meneruskan seluruh string sebagai URL proksi menghilangkan maknanya. Pisahkan kegagalan evaluasi dari hasil DIRECT yang eksplisit.
Saat berjalan
Konfigurasikan batas durasi, pernyataan, memori, dan pembatalan Jint, dan hanya ekspos fungsi host yang diperlukan. Batasi callback DNS secara terpisah: pemeriksaan eksekusi JavaScript tidak membuat panggilan host pemblokir sembarang dapat diinterupsi. Serialkan akses ke mesin atau berikan pekerjaan bersamaan instans yang dimiliki terpisah; mesin tidak aman untuk penggunaan bersamaan.
Implementasi PAC peramban dapat berbeda dalam ekstensi helper dan detail URL yang diekspos, terutama untuk HTTPS. Mencocokkan satu hasil contoh membuktikan lebih sedikit daripada mencocokkan perilaku perutean peramban.