ไวยากรณ์ PAC (Proxy auto-config)
หากเอกสารมีข้อผิดพลาดหรือมีข้อเสนอแนะ โปรดฝากข้อความในฟอรัม Mudfish (https://forums.mudfish.net) ตัวอย่างและคำอธิบายในเอกสารนี้จัดทำโดยแปลหรืออ้างอิงเนื้อหาจากเว็บไซต์ด้านล่าง
ส่วนขยายเบราว์เซอร์ Mudfish รองรับรูปแบบไฟล์ PAC (Proxy auto-config)
ฟังก์ชัน PAC
เบราว์เซอร์ที่รองรับรูปแบบ PAC โดยทั่วไปจะรองรับฟังก์ชันที่ระบุในรูปแบบมาตรฐานที่ Netscape กำหนด
อย่างไรก็ตาม ฟังก์ชันเหล่านี้มักทำงานใน sandbox จึงทำงานภายใต้สภาพแวดล้อมที่จำกัดอย่างเข้มงวด เช่น ไม่สามารถตรวจสอบข้อมูล User Agent ได้เลย
ด้านล่างอธิบายฟังก์ชันที่อนุญาตให้ใช้ใน sandbox
dnsDomainIs
ตรวจสอบ hostname และคืนค่า true หากตรงกัน โดยทั่วไปใช้ตรวจสอบ hostname เฉพาะที่ต้องการยกเว้น
// หาก hostname ตรงกับ google.com หรือโดเมนย่อย เช่น maps.google.com หรือ www.google.com
// ให้เบราว์เซอร์เชื่อมต่อโดยตรงโดยไม่ผ่านพร็อกซี
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
เปรียบเทียบ hostname หรือ URL กับสตริงที่กำหนดด้วยรูปแบบ shell และคืนค่า true หากตรงกัน
// ให้คำขอทั้งหมดที่ hostname ลงท้ายด้วย .local เชื่อมต่อโดยตรงโดยไม่ผ่านพร็อกซี
if (shExpMatch(url, "*.local"))
return "DIRECT";
// เชื่อมต่อ vpn.domain.com หรือโฟลเดอร์และไฟล์ใต้ http://abcdomain.com/folder/
// โดยตรงโดยไม่ผ่านพร็อกซี
if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";
isInNet
ฟังก์ชันนี้ตรวจสอบที่อยู่ IP ของ hostname และคืนค่า true หากอยู่ใน subnet ที่ระบุ หากส่ง hostname เป็นอาร์กิวเมนต์ จะแปลงเป็น IP ผ่านการค้นหา DNS
// หากที่อยู่ IP ของ hostname ที่ร้องขอหลังค้นหา DNS อยู่ในช่วง IP ที่ระบุ
// ให้เชื่อมต่อโดยตรง
if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";
myIpAddress
คืนค่าที่อยู่ IP ปัจจุบันของคอมพิวเตอร์ของคุณ
// หากคอมพิวเตอร์ของคุณอยู่ในช่วง IP ที่ระบุ
// ให้ส่งคำขอผ่านพร็อกซี 10.10.5.1 ที่พอร์ต 8080
if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";
dnsResolve
แปลง hostname เป็นที่อยู่ IP ผ่านการค้นหา DNS
// หาก IP ของโฮสต์ที่ร้องขออยู่ในช่วงที่ระบุ ให้เชื่อมต่อโดยตรง
if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";
isPlainHostName
คืนค่า true หาก hostname ไม่มีอักขระ . (จุด) เช่น http://intranet โดยทั่วไปใช้เมื่อเข้าถึงที่อยู่เว็บในเครือข่ายภายใน
// หากผู้ใช้ร้องขอ hostname แบบไม่มีจุด เช่น http://intranet/ หรือ
// http://webserver-name01/ ให้เชื่อมต่อโดยตรง
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
ตรวจสอบ hostname และคืนค่า true หากส่วน hostname ตรงกัน
// หาก hostname ที่ร้องขอเป็น "www" หรือ "www.google.com" ให้เชื่อมต่อโดยตรง
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
แปลง hostname เป็นที่อยู่ IP และคืนค่า true หากสำเร็จ
หากการค้นหาที่อยู่โดเมนไม่สำเร็จ เบราว์เซอร์อาจค้างชั่วคราว โปรดใช้อย่างระมัดระวัง
// หากเซิร์ฟเวอร์ DNS ค้นหาที่อยู่ของ hostname ที่ร้องขอได้
// ให้ส่งคำขอผ่านพร็อกซี proxy1.example.com
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
ตรวจสอบ hostname และคืนค่าจำนวน . (จุด) ในสตริงนั้น เช่น ใช้กำหนดข้อยกเว้นสำหรับเว็บเซิร์ฟเวอร์ในเครือข่ายภายใน
// หาก hostname มีจุดอย่างน้อยหนึ่งจุด ให้เชื่อมต่อผ่านพร็อกซี proxy1.example.com
// มิฉะนั้นให้เชื่อมต่อโดยตรง
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
ใช้สร้างกฎตามเวลา เช่น เมื่อต้องการคืนค่าการตั้งค่าพร็อกซีเฉพาะบางวัน
// ใช้พร็อกซี proxy1.example.com ตั้งแต่วันจันทร์ถึงวันศุกร์
// ในวันอื่นให้เชื่อมต่ออินเทอร์เน็ตโดยตรง
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
ใช้สร้างกฎตามเวลา เช่น เมื่อต้องการใช้พร็อกซีเฉพาะบางเดือน
// ใช้พร็อกซี proxy1.example.com ตั้งแต่เดือนมกราคมถึงเดือนมีนาคม
// ในเดือนอื่นให้เชื่อมต่อโดยตรง
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
ใช้เมื่อต้องการใช้พร็อกซีเฉพาะบางช่วงเวลา
// ใช้ proxy1.example.com เฉพาะเวลา 08:00 ถึง 18:00 น.
// นอกช่วงเวลานี้ให้เชื่อมต่อโดยตรง
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
ฟังก์ชันนี้ไม่มีอยู่ตอนกำหนดรูปแบบ PAC ครั้งแรก แต่มีการกำหนดไว้ในเบราว์เซอร์ Internet Explorer และ Firefox เพื่อใช้แก้ปัญหา
// แสดงผลการค้นหาที่อยู่ DNS ในคอนโซลข้อผิดพลาดของเบราว์เซอร์
resolved_host = dnsResolve(host);
alert(resolved_host);