AutoProxy 缓存

WinHttpGetProxyForUrl 函数针对指定的 URL 按请求执行自动proxy 查找。 如果返回了多个代理,客户端应用程序应在发送请求之前测试每个代理(有关详细信息,请参阅 WinHTTP 中的 AutoProxy 问题中的“仅支持一个代理服务器”部分)。 本主题中的信息适用于客户端指定自动代理发现时对 WinHttpGetProxyForUrl 的调用。

WinHttpGetProxyForUrl 选择性地找到 autoproxy URL,并从该站点下载 autoproxy 脚本。 WinHttp 使用 autoproxy 脚本查找代理服务器。 为指定的会话缓存 autoproxy URL 和 autoproxy 脚本。 每个会话只缓存一个 autoproxy URL 和脚本。 通常,将缓存 autoproxy 脚本和 URL,直到与计算机关联的 IP 地址发生更改。 如果在 WinHttpGetProxyForUrl调用期间检测到新的 IP 地址,则调用将尝试找到新的 autoproxy URL 并编写脚本并缓存结果。 每个会话只允许一个用户,以便缓存的数据不会与计算机上的其他用户共享。 有关详细信息,请参阅 WinHTTP 会话概述

如果在 调用 winHttpGetProxyForUrl 时进程外服务处于活动状态,则缓存的 autoproxy URL 和脚本可用于整个计算机。 但是,如果使用进程外服务,并且 pAutoProxyOptions 结构中的 fAutoLogonIfChallenged 标志为 true,则不会缓存 autoproxy URL 和脚本。 因此,调用 WinHttpGetProxyForUrl,并将 fAutoLogonIfChallenged 成员设置为 TRUE 会导致可能影响性能的其他开销作。 以下步骤可用于提高性能。

提高性能

  1. 调用 WinHttpGetProxyForUrl,并将 fAutoLogonIfChallenged 参数设置为 false。 将缓存 autoproxy URL 和脚本,以便将来调用 WinHttpGetProxyForUrl
  2. 如果步骤 1 失败,ERROR_WINHTTP_LOGIN_FAILURE,则调用 WinHttpGetProxyForUrl,并将 fAutoLogonIfChallenged 成员设置为 TRUE