PAC (Proxy auto-config) синтаксисі
Құжатта қате байқасаңыз немесе ұсыныстарыңыз болса, Mudfish форумында (https://forums.mudfish.net) хабарлама қалдырыңыз. Мұнда келтірілген мысалдар мен сипаттамалар келесі сайттардың мазмұнына сүйеніп жазылған:
Mudfish браузер кеңейтімдері PAC (Proxy auto-config) файл пішімін қолдайды.
PAC функциялары
PAC пішімін қолдайтын браузерлер әдетте Netscape компаниясы бекіткен стандартты сипаттамада көрсетілген функцияларды қолдайды.
Алайда, бұл функциялар құмсалғыш (sandbox) ішінде орындалатындықтан, қатаң шектелген ортада жұмыс істейді. Мысалы, User Agent ақпаратын қарау сияқты әрекеттерге түбегейлі тыйым салынған.
Төменде sandbox ортасында рұқсат етілген функциялар сипатталған:
dnsDomainIs
Hostname мәнін тексеріп, сәйкес келсе true қайтарады. Әдетте ерекшелік ретінде жеке хост атауларын тексеру үшін қолданылады.
// Егер хост атауы google.com-ға тең болса немесе оның қосалқы мекенжайлары сәйкес келсе
// (мысалы, maps.google.com, www.google.com),
// браузерге проксиді айналып өтіп, тікелей қосылуға нұсқау береді.
if (dnsDomainIs(host, "google.com"))
return "DIRECT";
shExpMatch
Hostname немесе URL мекенжайын shell үлгісінде көрсетілген жолмен салыстырып, сәйкес келсе true қайтарады.
// .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 мекенжайын тексеріп, ол белгілі бір ішкі желіде (subnet) орналасқан жағдайда, true қайтарады. Егер аргумент ретінде hostname берілсе, DNS шешу арқылы оны IP-ге түрлендіреді.
// Егер сұралған хосттың IP мекенжайы (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
DNS шешуі арқылы хост атауын IP мекенжайына айналдырады.
// Егер сұралған хосттың 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 қайтарады. Мысалы, http://intranet сияқты ішкі желілік веб-мекенжайларға кірген кезде қолданылады.
// Егер пайдаланушы қарапайым хост атауын сұраса (мысалы, http://intranet/
// немесе http://webserver-name01/), тікелей қосылады.
if (isPlainHostName(host))
return "DIRECT";
localHostOrDomainIs
Hostname атауын тексеріп, олар дәл сәйкес келсе true қайтарады.
// Егер сұралған хост "www" немесе "www.google.com" болса,
// тікелей қосылады.
if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";
isResolvable
Хост атауын IP мекенжайына сәтті айналдыра алса, true қайтарады.
Егер домендік мекенжай дұрыс анықталмаса, браузер біраз уақытқа қатып қалуы мүмкін. Сондықтан мұқият қолдану қажет.
// Егер сұралған хост атауы DNS серверінен табылып шешілсе,
// proxy1.example.com:8080 проксиі арқылы сұрау жасалады.
if (isResolvable(host))
return "PROXY proxy1.example.com:8080";
dnsDomainLevels
Hostname ішінде неше нүкте . бар екенін санайды. Мысалы, ішкі веб-серверлерді ерекшелік ретінде көрсету кезінде қолданылады.
// Егер хост атауында кемінде бір нүкте болса, proxy1.example.com:8080
// арқылы өтеді, әйтпесе тікелей қосылады.
if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
weekdayRange
Уақытқа негізделген ережелерді жасау үшін қолданылады. Мысалы, белгілі бір апта күндерінде ғана проксиді іске қосу қажет болғанда.
// Дүйсенбіден жұмаға дейін proxy1.example.com:8080 қолданылады,
// ал қалған күндері тікелей қосылады.
if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
dateRange
Уақытқа негізделген ереже құру үшін қолданылады. Мысалы, белгілі бір айларда ғана проксиді іске қосу қажет болғанда.
// Қаңтардан наурызға дейін proxy1.example.com:8080 проксиі қолданылады,
// ал қалған айларда тікелей қосылады.
if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
timeRange
Тек тәуліктің белгілі бір уақыт аралығында ғана проксиді пайдалану үшін қолданылады.
// Тек таңғы 08:00 мен кешкі 18:00 аралығында ғана proxy1.example.com қолданылады,
// қалған уақытта тікелей байланыс орнатылады.
if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";
alert
Бұл функция PAC пішімі алғаш рет жасалғанда болмаған, бірақ ақаулықтарды жөндеу (troubleshooting) мақсатында Internet Explorer мен Firefox браузерлерінде анықталған.
// Браузердің қателер консолінде DNS шешімінің нәтижесін шығарады.
resolved_host = dnsResolve(host);
alert(resolved_host);