Использование файлов автоматической настройки прокси-сервера (PAC) в IEAK 11
Предостережение
Обновление. Устаревшее, неподдерживаемое настольное приложение Internet Explorer 11 было навсегда отключено с помощью обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы об прекращении использования настольного приложения Internet Explorer 11.
Здесь приведены различные способы использования файла автоматической настройки прокси-сервера (PAC) для указания URL-адреса автоматического прокси-сервера. Мы добавили здесь некоторые примеры в помощь. Однако нужно будет изменить имена прокси-серверов, номера портов и IP-адреса в соответствии со сведениями о вашей организации.
Примеры:
- Пример 1. Прямое подключение для локального узла.
- Пример 2. Прямое подключение для узла за брандмауэром.
- Пример 3. Прямое подключение для разрешимого имени узла.
- Пример 4. Прямое подключение для узла в указанной подсети.
- Пример 5. Определение типа подключения на основе домена узла.
- Пример 6. Определение типа подключения на основе протокола.
- Пример 7. Определение прокси-сервера по имени узла, соответствующему IP-адресу.
- Пример 8. Подключение через прокси-сервер, если IP-адрес узла соответствует указанному IP-адресу.
- Пример 9. Подключение через прокси-сервер, если имя узла содержит точки.
- Пример 10. Подключение через прокси-сервер в зависимости от дня недели.
Пример 1. Прямое подключение для локального узла.
В этом примере возможно прямое подключение для локального узла. Если же сервер не является локальным, то он должен устанавливать подключение через прокси-сервер. В частности, функция isPlainHostName
проверяет наличие точек (.) в имени узла. Если функция находит точки, это значит, что узел не является локальным, и она возвращает значение false. В противном случае она возвращает значение true.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
Пример 2. Прямое подключение для узла за брандмауэром.
В этом примере возможно прямое подключение для узла за брандмауэром. Если же сервер находится вне брандмауэра, то он должен устанавливать подключение через прокси-сервер. В частности, функция localHostOrDomainIs
работает только для URL-адресов в локальном домене. Если доменное имя узла соответствует предоставленным данным о домене, то функция dnsDomainIs
возвращает значение true.
function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDoaminIs(host, "home.company.com"))
return "DIRECT";
else
return "PROXY proxy:80";
}
Пример 3. Прямое подключение для разрешимого имени узла.
В этом примере возможно прямое подключение для узла, имя которого удается разрешить. Если же имя не удается разрешить, то сервер должен устанавливать подключение через прокси-сервер. В частности, эта функция запрашивает DNS-сервер для разрешения переданного ей имени узла. Если удается разрешить имя, устанавливается прямое подключение. В противном случае устанавливается подключение через прокси-сервер. Это особенно полезно, если внутренний DNS-сервер используется для разрешения всех внутренних имен узлов.
Важно!
Функция isResolvable
запрашивает DNS-сервер. Ссылки на объекты, свойства и методы объектной модели вызывают ошибку файла автоматической настройки прокси-сервера без выдачи сообщений. Например, ссылки window.open(...)
, alert(...)
и password(...)
вызывают сбой файла конфигурации прокси-сервера.
function FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
Пример 4. Прямое подключение для узла в указанной подсети.
В этом примере возможно прямое подключение для узла в указанной подсети. Если же сервер находится вне указанной подсети, то он должен устанавливать подключение через прокси-сервер. В частности, функция isInNet
(узел, шаблон, маска) возвращает значение true, если IP-адрес узла соответствует указанному шаблону. Маска указывает, какую часть IP-адреса сопоставлять (255 = сопоставлять, 0 = игнорировать).
Важно!
Функция isInNet
запрашивает DNS-сервер. Ссылки на объекты, свойства и методы объектной модели вызывают ошибку файла автоматической настройки прокси-сервера без выдачи сообщений. Например, ссылки window.open(...)
, alert(...)
и password(...)
вызывают сбой файла конфигурации прокси-сервера.
function FindProxyForURL(url, host)
{
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
return "DIRECT";
else
return "PROXY proxy:80";
}
Пример 5. Определение типа подключения на основе домена узла.
В этом примере возможно прямое подключение сервера для локального узла. Если же узел не является локальным, то эта функция определяет используемый прокси-сервер по домену узла. В частности, функция shExpMatch(str, shexp)
возвращает значение true, если str
соответствует параметру shexp
, который использует шаблоны выражения оболочки. Это особенно удобно, если доменное имя узла является одним из критериев выбора прокси-сервера.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80";
else if (shExpMatch(host, "*.edu"))
return "PROXY eduproxy:80";
else
return "PROXY proxy";
}
Пример 6. Определение типа подключения на основе протокола.
В этом примере используемый протокол извлекается из сервера и служит для выбора прокси-сервера. Если соответствие протокола не обнаруживается, то сервер устанавливает прямое подключение. В частности, функция substring
извлекает указанное количество символов из строки. Это особенно удобно, если протокол является одним из критериев выбора прокси-сервера.
function FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
return "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.substring(0, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
return "DIRECT";
}
}
Пример 7. Определение прокси-сервера по имени узла, соответствующему IP-адресу.
В этом примере прокси-сервер выбирается путем преобразования имени узла в IP-адрес с последующим сравнением адреса с указанной строкой.
Важно!
Функция dnsResolve
запрашивает DNS-сервер. Ссылки на объекты, свойства и методы объектной модели вызывают ошибку файла автоматической настройки прокси-сервера без выдачи сообщений. Например, ссылки window.open(...)
, alert(...)
и password(...)
вызывают сбой файла конфигурации прокси-сервера.
function FindProxyForURL(url, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = https://secproxy
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
Пример 8. Подключение через прокси-сервер, если IP-адрес узла соответствует указанному IP-адресу.
В этом примере прокси-сервер выбирается путем явного получения IP-адреса с последующим сравнением его с указанной строкой. Если соответствие протокола не обнаруживается, то сервер устанавливает прямое подключение. В частности, функция myIpAddress
возвращает IP-адрес (в формате целых чисел, разделенных точками) для узла, на котором работает браузер.
function FindProxyForURL(url, host)
{
if (myIpAddress() == "999.99.999.99") {
return "PROXY proxy:80";
}
else {
return "DIRECT";
}
}
Пример 9. Подключение через прокси-сервер, если имя узла содержит точки.
В этом примере функция проверяет наличие точек (.) в имени узла. Если имя содержит точки, то подключение устанавливается через прокси-сервер. Если точек нет, то устанавливается прямое подключение. В частности, функция dnsDomainLevels
возвращает целое число, равное количеству точек в имени узла.
Примечание
Это другой способ определения типа подключения, основанный на характеристиках имени узла.
function FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if the number of periods in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}
Пример 10. Подключение через прокси-сервер в зависимости от дня недели.
В этом примере функция определяет необходимость подключения через прокси-сервер в зависимости от дня недели. В дни, которые не попадают в указанный диапазон дат, сервер может устанавливать прямое подключение. В частности, функция weekdayRange(day1 [,day2] [,GMT] )
возвращает, в зависимости от того, находится ли текущее системное время в диапазоне, указанном в параметрах day1
, day2
и GMT
. Обязателен только первый параметр. Параметр GMT указывает, что задано время по Гринвичу, а не местное. Эта функция особенно удобна в случаях, когда прокси-сервер нужно использовать в период высокой загрузки, а в относительно свободное время допускается прямое подключение.
function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}