Chuyển đến nội dung chính

Cú pháp PAC (Proxy auto-config)

Thông tin

Nếu tài liệu có lỗi hoặc bạn có đề xuất, hãy để lại lời nhắn trên diễn đàn Mudfish (https://forums.mudfish.net). Các ví dụ và phần giải thích ở đây được dịch hoặc viết dựa trên nội dung của các trang sau.

Tiện ích trình duyệt Mudfish hỗ trợ định dạng tệp PAC (Proxy auto-config).

Các hàm PAC​

Các trình duyệt hỗ trợ định dạng PAC thường hỗ trợ các hàm trong định dạng tiêu chuẩn do Netscape quy định.

Tuy nhiên, các hàm này thường chạy trong sandbox nên môi trường thực thi bị hạn chế nghiêm ngặt. Ví dụ, việc truy cập thông tin User Agent hoàn toàn bị chặn.

Dưới đây là mô tả các hàm được phép dùng trong môi trường sandbox.

dnsDomainIs​

Kiểm tra hostname và trả về true nếu khớp. Thường dùng để kiểm tra các hostname riêng lẻ cần áp dụng ngoại lệ.

   // Nếu hostname là google.com hoặc một tên miền con
// (ví dụ maps.google.com, www.google.com),
// trình duyệt sẽ kết nối trực tiếp, không qua proxy.

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

So sánh hostname hoặc URL với chuỗi được chỉ định bằng biểu thức shell và trả về true nếu khớp.

   // Các yêu cầu có hostname kết thúc bằng .local
// sẽ được trình duyệt kết nối trực tiếp, không qua proxy.

if (shExpMatch(url, "*.local"))
return "DIRECT";

// Các yêu cầu đến vpn.domain.com hoặc mọi thư mục, tệp
// bên dưới http://abcdomain.com/folder/
// sẽ kết nối trực tiếp, không qua proxy.

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

Hàm này kiểm tra địa chỉ IP của hostname và trả về true nếu địa chỉ nằm trong subnet được chỉ định. Nếu đối số truyền vào là hostname, hàm sẽ phân giải DNS để chuyển thành địa chỉ IP.

   // Nếu địa chỉ IP của hostname sau khi phân giải DNS
// thuộc dải IP được truyền vào, hãy kết nối trực tiếp.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Trả về địa chỉ IP của máy tính hiện tại.

   // Nếu máy tính thuộc dải IP được chỉ định,
// gửi yêu cầu qua proxy 10.10.5.1, cổng 8080.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

Chuyển hostname thành địa chỉ IP bằng cách phân giải DNS.

   // Nếu IP của host được yêu cầu thuộc dải chỉ định,
// hãy kết nối trực tiếp.

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​

Trả về true nếu hostname không chứa dấu . (chấm). Ví dụ như http://intranet; hàm này thường có thể dùng khi truy cập địa chỉ web trong mạng nội bộ.

   // Nếu người dùng yêu cầu hostname không có dấu chấm
// (ví dụ http://intranet/ hoặc http://webserver-name01/), hãy kết nối trực tiếp.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Kiểm tra hostname và trả về true nếu phần hostname khớp nhau.

   // Nếu hostname được yêu cầu là "www" hoặc "www.google.com",
// hãy kết nối trực tiếp.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Chuyển hostname thành địa chỉ IP và trả về true nếu thành công.

Nếu không phân giải được tên miền, trình duyệt có thể tạm thời bị treo (ngừng phản hồi). Hãy thận trọng khi sử dụng.

   // Nếu máy chủ DNS phân giải được hostname yêu cầu,
// hãy gửi yêu cầu qua proxy1.example.com.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

Kiểm tra hostname và trả về số dấu . (chấm) trong chuỗi. Ví dụ, có thể dùng để tạo ngoại lệ cho máy chủ web trong mạng nội bộ.

   // Nếu hostname chứa ít nhất một dấu chấm, kết nối qua
// proxy1.example.com; nếu không, kết nối trực tiếp.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

Có thể dùng để tạo quy tắc dựa trên thời gian, chẳng hạn chỉ trả về cài đặt proxy vào những ngày cụ thể.

   // Từ thứ Hai đến thứ Sáu, sử dụng proxy1.example.com;
// vào các ngày khác, kết nối Internet trực tiếp.

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

Có thể dùng để tạo quy tắc dựa trên thời gian, chẳng hạn chỉ áp dụng proxy trong những tháng cụ thể.


// Từ tháng 1 đến tháng 3, sử dụng proxy1.example.com;
// vào các tháng khác, kết nối trực tiếp.

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

Có thể dùng khi bạn chỉ muốn sử dụng proxy trong một khoảng thời gian cụ thể.

   // Chỉ sử dụng proxy1.example.com từ 8 giờ sáng đến 6 giờ tối;
// ngoài khoảng thời gian này, kết nối trực tiếp.

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

Hàm này không có khi định dạng PAC được định nghĩa lần đầu, nhưng Internet Explorer và Firefox có định nghĩa hàm này để phục vụ việc khắc phục sự cố.

   // In kết quả phân giải DNS ra bảng điều khiển lỗi của trình duyệt.

resolved_host = dnsResolve(host);
alert(resolved_host);