Sari la conținutul principal

Sintaxa PAC (Proxy auto-config)

Informații

Dacă găsiți greșeli sau aveți sugestii, lăsați un mesaj pe forumul Mudfish (https://forums.mudfish.net). Exemplele și explicațiile din sursă au fost traduse sau redactate folosind:

Extensia Mudfish pentru browser acceptă formatul PAC (Proxy auto-config).

Funcții PAC​

Browserele compatibile cu PAC acceptă de obicei funcțiile din formatul standard stabilit de Netscape. Funcțiile rulează însă într-un mediu sandbox strict limitat; de exemplu, nu puteți consulta informația User Agent.

Mai jos sunt funcțiile permise în acest mediu. Codul și comentariile sale sunt păstrate din original; explicațiile în română descriu și comportamentul exemplelor.

dnsDomainIs​

Verifică numele gazdei și returnează true dacă se potrivește cu domeniul. Este folosită de obicei pentru verificarea unor gazde individuale tratate ca excepții. Exemplul conectează direct, fără proxy, google.com și subdomenii precum maps.google.com sau www.google.com.

   // 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

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

shExpMatch​

Compară numele gazdei sau URL-ul cu un șablon de tip shell și returnează true la potrivire. Exemplul conectează direct cererile cu nume terminate în .local, gazda vpn.domain.com și toate dosarele sau fișierele de sub http://abcdomain.com/folder/.

   // 모든 request 들 (.local 로 끝나는 모든 hostname 에 해당) 이
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

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

// vpn.domain.com 에 접속할려고 하거나
// http://abcdomain.com/folder/ 하위의 모든 폴더 혹은 파일에 접속하는
// 요청들을 proxy 경유없이 직접 접속합니다.

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

isInNet​

Verifică dacă adresa IP a gazdei aparține unei subrețele și returnează true dacă da. Dacă primește un nume de gazdă, îl transformă în IP prin rezolvare DNS. Exemplul conectează direct dacă IP-ul rezolvat se află în intervalul specificat.

   // 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.

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

myIpAddress​

Returnează adresa IP a calculatorului curent. Exemplul trimite cererile prin proxy-ul 10.10.5.1, port 8080, dacă adresa calculatorului aparține subrețelei indicate.

   // 만약 나의 컴퓨터가 특정 IP 대역에 속할 경우 proxy 10.10.5.1 (포트는 8080)
// 를 통해 요청하도록 합니다.

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

dnsResolve​

Transformă numele gazdei în adresă IP prin rezolvare DNS. Exemplul conectează direct dacă IP-ul gazdei solicitate aparține unuia dintre intervalele indicate.

   // 만약 요청한 host 의 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​

Returnează true dacă numele gazdei nu conține niciun punct (.). Este utilă pentru adrese interne precum http://intranet. Exemplul conectează direct gazde simple precum http://intranet/ sau http://webserver-name01/.

   // 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.

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

localHostOrDomainIs​

Verifică numele gazdei și returnează true dacă partea corespunzătoare numelui se potrivește. Exemplul conectează direct dacă gazda solicitată este „www” sau „www.google.com”.

   // 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.

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

isResolvable​

Încearcă transformarea numelui gazdei în IP și returnează true la succes.

Dacă domeniul nu poate fi rezolvat corect, browserul se poate bloca temporar. Folosiți funcția cu atenție.

Exemplul trimite cererea prin proxy1.example.com dacă serverul DNS poate rezolva gazda.

   // 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.

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

dnsDomainLevels​

Returnează numărul de puncte (.) din numele gazdei. Poate fi folosită pentru exceptarea serverelor web interne. Exemplul folosește proxy1.example.com dacă numele conține cel puțin un punct; în caz contrar, se conectează direct.

   // 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.

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

weekdayRange​

Permite reguli bazate pe timp, de exemplu utilizarea proxy-ului numai în anumite zile. Exemplul folosește proxy1.example.com de luni până vineri și conexiunea directă în rest.

   // 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.

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

dateRange​

Permite reguli bazate pe dată, de exemplu utilizarea proxy-ului numai în anumite luni. Exemplul folosește proxy1.example.com din ianuarie până în martie și conexiunea directă în rest.


// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.

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

timeRange​

Permite utilizarea proxy-ului numai într-un anumit interval orar. Exemplul folosește proxy1.example.com între orele 8 și 18 și conexiunea directă în rest.

   // 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.

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

alert​

Nu exista în definiția inițială PAC, dar este implementată de Internet Explorer și Firefox pentru depanare. Exemplul afișează rezultatul rezolvării DNS în consola de erori a browserului.

   // 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.

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