Problemas de AutoProxia no WinHTTP
Considere os seguintes problemas importantes ao usar o recurso de reprodução automática WinHTTP.
No momento, há suporte apenas para um servidor proxy
No momento, o WinHTTP não dá suporte a configurações de proxy que especificam mais de um servidor proxy. Se WinHttpGetProxyForUrl retornar uma estrutura WINHTTP_PROXY_INFO que contém uma lista de servidores proxy, que o aplicativo define no identificador de solicitação usando a opção WINHTTP_OPTION_PROXY , o WinHTTP usará apenas o primeiro servidor proxy na lista. Se esse servidor proxy não estiver acessível, o WinHTTP não fará failover para nenhum dos outros servidores proxy na lista. Cabe ao aplicativo lidar com esse caso definindo a opção WINHTTP_OPTION_PROXY novamente com o próximo servidor proxy na lista e reenviando a solicitação.
Mitigação de risco de segurança
O processamento do arquivo de configuração automática de proxy requer a execução do código de script baixado. Algumas preocupações de segurança a serem consideradas: se o servidor no qual o arquivo PAC reside tiver sido comprometido, é possível que o código de script PAC seja mal-intencionado. Portanto, o WinHTTP usa as seguintes precauções para proteger o cliente:
O código de script é impedido de instanciar qualquer objeto ActiveX. Isso bloqueia muitas funcionalidades potencialmente perigosas, como a capacidade de acessar arquivos e executar E/S de rede.
**Windows Server 2003: **WinHttpGetProxyForUrl delega todo o processamento do WPAD a um serviço externo fora do processo, o serviço de Descoberta Automática de Proxy Web WinHTTP, que é executado sob a conta de usuário interna do Serviço Local de baixo privilégio.
Windows XP com SP2 e Windows Server 2003: Um script PAC não tem permissão para ser executado por mais de 60 segundos, após o qual a execução do script é encerrada.
Windows XP com SP2 e Windows Server 2003: O WinHTTP rejeita arquivos PAC maiores que 1 MB. Um arquivo PAC típico geralmente não tem mais do que alguns quilobytes de tamanho.
Lembre-se de que o processamento do código de script PAC requer o uso de COM, pois o WinHTTP usa o componente JScript da Microsoft para executar o script. Se o WinHTTP não puder delegar o processamento de protocolo WPAD a um serviço de Descoberta Automática de Proxy Web externo fora do processo, o WinHttpGetProxyForUrl carregará o runtime COM dentro do processo do aplicativo durante a chamada. Se o aplicativo em si já estiver usando COM, isso não deve ser uma preocupação.
Considerações sobre desempenho
O processo de detecção automática pode ser lento, possivelmente por vários segundos. As funções WinHttpGetProxyForUrl e WinHttpDetectAutoProxyConfigUrl estão bloqueando funções síncronas. Pode ser que um mecanismo de detecção automática específico (como o DHCP) seja muito mais lento do que o outro (como o DNS). Se os sinalizadores de detecção automática WINHTTP_AUTO_DETECT_TYPE_DHCP e WINHTTP_AUTO_DETECT_TYPE_DNS_A forem especificados, o WinHTTP usará o DHCP primeiro, de acordo com a especificação do WPAD. Se nenhuma URL PAC for descoberta emitindo uma solicitação DHCP, o WinHTTP tentará localizar o arquivo PAC em um endereço DNS conhecido.
WinHttpGetProxyForUrl usa o parâmetro de identificador de sessão WinHTTP para armazenar em cache o arquivo PAC e os resultados da detecção automática. É melhor usar o mesmo identificador de sessão para várias chamadas WinHttpGetProxyForUrl , se possível, para evitar a detecção repetida de URL pac e o download de arquivos. O arquivo PAC é armazenado em cache somente na memória e é descartado quando o aplicativo fecha o identificador de sessão.
Devido ao impacto no desempenho da reprodução automática, é recomendável que apenas aplicativos ou serviços cliente da área de trabalho usem o recurso; os aplicativos baseados em servidor devem depender do administrador do servidor usando o utilitário "ProxyCfg.exe".