Кэш AutoProxy

Функция WinHttpGetProxyForUrl выполняет автоматический поиск по запросу для указанного URL-адреса. Если возвращается несколько прокси-серверов, клиентские приложения должны протестировать каждый прокси-сервер перед отправкой запроса (дополнительные сведения см. в разделе Поддерживается только один прокси-сервер в настоящее время статьи Проблемы с AutoProxy в WinHTTP). Сведения в этом разделе относятся к вызовам WinHttpGetProxyForUrl , когда клиент задает автоматическое обнаружение прокси-сервера.

WinHttpGetProxyForUrl при необходимости находит URL-адрес автопрокси и скачивает скрипт autoproxy с этого сайта. WinHttp использует скрипт autoproxy для поиска прокси-серверов. URL-адрес автопрокси и скрипт autoproxy кэшируются для указанного сеанса. Для каждого сеанса кэшируются только один URL-адрес автопрокси и скрипт. Как правило, скрипт и URL-адрес автопрокси кэшируются до тех пор, пока НЕ изменится IP-адрес, связанный с компьютером. Если во время вызова WinHttpGetProxyForUrl обнаружен новый IP-адрес, вызов попытается найти новый URL-адрес автопрокси и скрипт и кэшировать результаты. В сеансе должен быть разрешен только один пользователь, чтобы кэшированные данные не предоставлялись другим пользователям на компьютере. Дополнительные сведения см. в статье Общие сведения о сеансах WinHTTP.

Если внепроцессная служба активна при вызове WinHttpGetProxyForUrl , кэшированный URL-адрес и скрипт автопрокси доступны для всего компьютера. Однако если используется внепроцессная служба и флаг fAutoLogonIfChallenged в структуре pAutoProxyOptions имеет значение true, URL-адрес автопрокси и скрипт не кэшируются. Таким образом, вызов WinHttpGetProxyForUrl с элементом fAutoLogonIfChallenged, равнымTRUE , приводит к дополнительным операциям, которые могут повлиять на производительность. Для повышения производительности можно использовать следующие действия.

Повышение производительности

  1. Вызовите WinHttpGetProxyForUrl с параметром fAutoLogonIfChallenged, равным false. URL-адрес и скрипт автопрокси кэшируются для будущих вызовов WinHttpGetProxyForUrl.
  2. Если шаг 1 завершается сбоем с ERROR_WINHTTP_LOGIN_FAILURE, вызовите WinHttpGetProxyForUrl с элементом fAutoLogonIfChallenged , равным TRUE.