Preskočiť na hlavný obsah

Syntax PAC (Proxy auto-config)

Informácie

Ak v dokumente nájdete chybu alebo máte návrh, zanechajte správu na fóre Mudfish (https://forums.mudfish.net). Príklady a vysvetlenia vychádzajú z prekladov alebo informácií na týchto stránkach:

Rozšírenie Mudfish pre prehliadač podporuje formát súborov PAC (Proxy auto-config).

Funkcie PAC​

Prehliadače podporujúce PAC zvyčajne implementujú funkcie štandardného formátu definovaného spoločnosťou Netscape.

Tieto funkcie však zvyčajne bežia v sandboxe, teda v prísne obmedzenom prostredí. Nie je napríklad možné čítať údaje User Agent.

Nasleduje opis funkcií povolených v sandboxe. Kódové príklady sú zachované zo zdroja vrátane komentárov; ich význam je vysvetlený po slovensky pred každým príkladom.

dnsDomainIs​

Kontroluje názov hostiteľa a pri zhode vracia true. Zvyčajne sa používa na kontrolu jednotlivých hostiteľov, pre ktorých platí výnimka.

Príklad umožní priame spojenie bez proxy, ak hostiteľ zodpovedá google.com alebo jeho poddoménam, napríklad maps.google.com či www.google.com.

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

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

shExpMatch​

Porovnáva názov hostiteľa alebo URL s reťazcom v shellovej syntaxi a pri zhode vracia true.

Prvý príklad pripája všetky požiadavky s hostiteľom končiacim na .local priamo bez proxy. Druhý priamo pripája požiadavky na vpn.domain.com alebo na všetky súbory a priečinky pod 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​

Kontroluje IP adresu hostiteľa a vracia true, ak patrí do zadanej podsiete. Ak dostane názov hostiteľa, prevedie ho na IP pomocou DNS.

Príklad sa pripája priamo, ak IP požadovaného hostiteľa po preklade DNS patrí do zadaného rozsahu.

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

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

myIpAddress​

Vracia IP adresu aktuálneho počítača.

Príklad posiela požiadavky cez proxy 10.10.5.1 na porte 8080, ak počítač patrí do určitého rozsahu IP.

   // 만약 나의 컴퓨터가 특정 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​

Prekladá názov hostiteľa na IP adresu pomocou DNS.

Príklad pripája požadovaného hostiteľa priamo, ak jeho IP patrí do niektorého z uvedených rozsahov.

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

Vracia true, ak názov hostiteľa neobsahuje žiadnu bodku. Príkladom je http://intranet; funkcia sa môže použiť pri prístupe k webovým adresám vnútornej siete.

Príklad sa pripája priamo pri jednoduchom názve hostiteľa, napríklad http://intranet/ alebo http://webserver-name01/.

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

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

localHostOrDomainIs​

Kontroluje názov hostiteľa a vracia true, ak sa časti názvu hostiteľa zhodujú.

Príklad sa pripája priamo, ak je požadovaný názov „www“ alebo „www.google.com“.

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

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

isResolvable​

Prekladá názov hostiteľa na IP adresu a pri úspechu vracia true.

Ak sa doména nedá správne preložiť, prehliadač môže na chvíľu zamrznúť. Používajte funkciu opatrne.

Ak server DNS dokáže preložiť požadovaný názov hostiteľa, príklad odošle požiadavku cez proxy1.example.com.

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

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

dnsDomainLevels​

Vracia počet bodiek v názve hostiteľa. Môže sa použiť napríklad na vytvorenie výnimky pre webový server vnútornej siete.

Ak názov obsahuje aspoň jednu bodku, príklad použije proxy1.example.com; inak sa pripojí priamo.

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

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

weekdayRange​

Umožňuje vytvárať pravidlá podľa času, napríklad vracať nastavenie proxy iba v určité dni.

Príklad od pondelka do piatka používa proxy1.example.com; inokedy sa pripája k internetu priamo.

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

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

dateRange​

Umožňuje vytvárať časové pravidlá, napríklad používať proxy iba v určitých mesiacoch.

Príklad od januára do marca používa proxy1.example.com; inokedy sa pripája priamo.


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

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

timeRange​

Umožňuje používať proxy iba v konkrétnom čase.

Príklad používa proxy1.example.com iba od 8:00 do 18:00; inokedy sa pripája priamo.

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

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

alert​

Táto funkcia nebola súčasťou pôvodnej definície PAC. Internet Explorer a Firefox ju však definujú na riešenie problémov.

Príklad vypíše výsledok prekladu DNS do chybovej konzoly prehliadača.

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

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