Использование файлов автоматической настройки прокси-сервера (PAC) в IEAK 11

Предостережение

Обновление. Устаревшее, неподдерживаемое настольное приложение Internet Explorer 11 было навсегда отключено с помощью обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы об прекращении использования настольного приложения Internet Explorer 11.

Здесь приведены различные способы использования файла автоматической настройки прокси-сервера (PAC) для указания URL-адреса автоматического прокси-сервера. Мы добавили здесь некоторые примеры в помощь. Однако нужно будет изменить имена прокси-серверов, номера портов и IP-адреса в соответствии со сведениями о вашей организации.

Примеры:

Пример 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";
 }