Проблемы с AutoProxy в WinHTTP

При использовании функции автопрокси WinHTTP учитывайте следующие важные проблемы.

В настоящее время поддерживается только один прокси-сервер

WinHTTP в настоящее время не поддерживает конфигурации прокси-сервера, которые указывают более одного прокси-сервера. Если WinHttpGetProxyForUrl возвращает структуру WINHTTP_PROXY_INFO , содержащую список прокси-серверов, который приложение затем задает в дескрипторе запроса с помощью параметра WINHTTP_OPTION_PROXY , WinHTTP использует только первый прокси-сервер в списке. Если этот прокси-сервер недоступен, WinHTTP не выполняет отработку отказа на другие прокси-серверы в списке. Приложение может справиться с этим делом, снова задав параметр WINHTTP_OPTION_PROXY со следующим прокси-сервером в списке и повторно отправьте запрос.

Устранение рисков безопасности

Для обработки файла автоматической настройки прокси-сервера необходимо выполнить скачанный код скрипта. Некоторые проблемы безопасности, которые следует учитывать: если сервер, на котором находится PAC-файл, был скомпрометирован, возможно, код скрипта PAC является вредоносным. Поэтому WinHTTP использует следующие меры предосторожности для защиты клиента:

  1. Код скрипта не позволяет создавать экземпляры любых объектов ActiveX. Это блокирует множество потенциально опасных функций, таких как возможность доступа к файлам и выполнения сетевых операций ввода-вывода.

  2. **Windows Server 2003: **WinHttpGetProxyForUrl делегирует всю обработку WPAD внешней внепроцессной службе, службе автоматического обнаружения веб-прокси WinHTTP, которая выполняется под встроенной учетной записью пользователя локальной службы с низким уровнем привилегий.

  3. Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003: Скрипт PAC не может выполняться дольше 60 секунд, после чего выполнение скрипта завершается.

  4. 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. Если при выполнении DHCP-запроса НЕ обнаруживается НИГ-адрес PAC, winHTTP пытается найти PAC-файл по известному DNS-адресу.

WinHttpGetProxyForUrl использует параметр дескриптора сеанса WinHTTP для кэширования PAC-файла и результатов автоматического обнаружения. По возможности рекомендуется использовать один и тот же дескриптор сеанса для нескольких вызовов WinHttpGetProxyForUrl , чтобы избежать повторного обнаружения URL-адресов PAC и скачивания файлов. PAC-файл кэшируется только в памяти и удаляется, когда приложение закрывает дескриптор сеанса.

Из-за влияния автопрокси на производительность рекомендуется использовать эту функцию только классическим клиентским приложениям или службам; Серверные приложения должны полагаться на администратора сервера с помощью служебной программы "ProxyCfg.exe".