Проблемы автопрокси в WinHTTP
При использовании функции автопрокси WinHTTP следует учитывать следующие важные проблемы.
В настоящее время поддерживается только один прокси-сервер
WinHTTP в настоящее время не поддерживает конфигурации прокси-сервера, которые указывают несколько прокси-серверов. Если WinHttpGetProxyForUrl возвращает WINHTTP_PROXY_INFO структуру, содержащую список прокси-серверов, который приложение затем задает по дескриптору запроса с помощью параметра WINHTTP_OPTION_PROXY, WinHTTP использует только первый прокси-сервер в списке. Если этот прокси-сервер недоступен, WinHTTP не выполняет отработку отказа ни на один из других прокси-серверов в списке. Приложение может обрабатывать этот случай, задав параметр WINHTTP_OPTION_PROXY снова с помощью следующего прокси-сервера в списке и повторного отправки запроса.
Устранение рисков безопасности
Для обработки файла автоматической настройки прокси-сервера требуется выполнить скачанный код скрипта. Некоторые проблемы безопасности, которые следует учитывать: если сервер, на котором находится ФАЙЛ PAC, скомпрометирован, возможно, код скрипта PAC является вредоносным. Поэтому WinHTTP использует следующие меры предосторожности для защиты клиента:
Код скрипта не позволяет создавать экземпляры объектов ActiveX. Это блокирует множество потенциально опасных функций, таких как возможность доступа к файлам и выполнение сетевых операций ввода-вывода.
**Windows Server 2003: **WinHttpGetProxyForUrl делегирует всю обработку WPAD внешней внепроцессной службе, службе автоматического обнаружения веб-прокси WinHTTP, которая выполняется под встроенной локальной учетной записью локальной службы с низким уровнем привилегий.
Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003: скрипт PAC не может выполняться дольше 60 секунд после завершения выполнения скрипта.
Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003: WinHTTP отклоняет ФАЙЛЫ PAC размером более 1 МБ. Типичный PAC-файл обычно не превышает несколько килобайтов в размере.
Помните, что для обработки кода скрипта PAC требуется использование COM, так как WinHTTP использует компонент Microsoft JScript для выполнения скрипта. Если WinHTTP не может делегировать обработку протокола WPAD внешней, внепроцессной службе автоматического обнаружения веб-прокси, WinHttpGetProxyForUrl загружает среду выполнения COM в процессе приложения на время вызова. Если само приложение уже использует COM, это не должно быть проблемой.
Рекомендации по производительности
Процесс автоматического обнаружения может быть медленным, возможно, до нескольких секунд. Функции WinHttpGetProxyForUrl и WinHttpDetectAutoProxyConfigUrl блокируют синхронные функции. Может быть, что один конкретный механизм автоматического обнаружения (например, DHCP) гораздо медленнее, чем другой (например, DNS). Если указаны WINHTTP_AUTO_DETECT_TYPE_DHCP и WINHTTP_AUTO_DETECT_TYPE_DNS_A флаги автоматического обнаружения, WinHTTP сначала использует DHCP в соответствии со спецификацией WPAD. Если URL-адрес PAC не обнаружен путем выдачи DHCP-запроса, WinHTTP пытается найти PAC-файл по известному DNS-адресу.
WinHttpGetProxyForUrl использует параметр дескриптора сеанса WinHTTP для кэширования PAC-файла и результатов автоматического обнаружения. Рекомендуется использовать один и тот же дескри птор сеанса для нескольких вызовов WinHttpGetProxyForUrl, если это возможно, чтобы избежать повторного обнаружения URL-адресов PAC и скачивания файлов. Файл PAC кэшируется только в памяти и удаляется, когда приложение закрывает дескриптор сеанса.
Из-за влияния автопрокси на производительность рекомендуется использовать только классические клиентские приложения или службы; Серверные приложения должны полагаться на администратора сервера с помощью служебной программы "ProxyCfg.exe".