Dela via


Problem med AutoProxy i WinHTTP

Tänk på följande viktiga problem när du använder funktionen WinHTTP autoproxy.

Endast en proxyserver stöds för närvarande

WinHTTP stöder för närvarande inte proxykonfigurationer som anger mer än en proxyserver. Om WinHttpGetProxyForUrl- returnerar en WINHTTP_PROXY_INFO struktur som innehåller en lista över proxyservrar som programmet sedan anger på begärandehandtaget med alternativet WINHTTP_OPTION_PROXY använder WinHTTP endast den första proxyservern i listan. Om proxyservern inte är tillgänglig redundansväxlar WinHTTP inte till någon av de andra proxyservrarna i listan. Det är upp till programmet att hantera det här fallet genom att ange alternativet WINHTTP_OPTION_PROXY igen med nästa proxyserver i listan och skicka begäran igen.

Riskreducering för säkerhet

Bearbetning av den automatiska proxykonfigurationsfilen kräver att den nedladdade skriptkoden körs. Några säkerhetsproblem att tänka på: Om servern där PAC-filen finns har komprometterats är det möjligt att PAC-skriptkoden är skadlig. Därför använder WinHTTP följande försiktighetsåtgärder för att skydda klienten:

  1. Skriptkoden hindras från att instansiera activex-objekt. Detta blockerar många potentiellt farliga funktioner, till exempel möjligheten att komma åt filer och utföra nätverks-I/O.

  2. **Windows Server 2003: **WinHttpGetProxyForUrl delegerar hela WPAD-bearbetningen till en extern out-of-process-tjänst, WinHTTP Web Proxy Auto-Discovery-tjänsten, som körs under det inbyggda användarkontot för lågprivilegierad lokal tjänst.

  3. Windows XP med SP2 och Windows Server 2003: Ett PAC-skript får inte köras längre än 60 sekunder, varefter skriptkörningen avslutas.

  4. Windows XP med SP2 och Windows Server 2003: WinHTTP avvisar PAC-filer som är större än 1 MB. En typisk PAC-fil är vanligtvis inte mer än några kilobyte i storlek.

Tänk på att bearbetning av PAC-skriptkoden kräver användning av COM, eftersom WinHTTP använder Microsoft JScript-komponenten för att köra skriptet. Om WinHTTP inte kan delegera WPAD-protokollbearbetning till en extern, out-of-process Web Proxy Auto-Discovery-tjänst WinHttpGetProxyForUrl läser in COM-körningen inom programprocessen under hela anropet. Om själva programmet redan använder COM bör detta inte vara ett problem.

Prestandaöverväganden

Processen för automatisk identifiering kan vara långsam, möjligen så länge som flera sekunder. Funktionerna WinHttpGetProxyForUrl och WinHttpDetectAutoProxyConfigUrl blockerar synkrona funktioner. Det kan vara så att en viss mekanism för automatisk identifiering (till exempel DHCP) är mycket långsammare än den andra (till exempel DNS). Om både WINHTTP_AUTO_DETECT_TYPE_DHCP- och WINHTTP_AUTO_DETECT_TYPE_DNS_A automatiskt identifieringsflaggor anges använder WinHTTP DHCP först i enlighet med WPAD-specifikationen. Om ingen PAC-URL identifieras genom att utfärda en DHCP-begäran försöker WinHTTP hitta PAC-filen på en välkänd DNS-adress.

WinHttpGetProxyForUrl- använder winHTTP-sessionsreferensparametern för cachelagring av PAC-filen och resultatet av automatisk identifiering. Det är bäst att använda samma sessionshandtag för flera WinHttpGetProxyForUrl anrop om möjligt för att undvika upprepad IDENTIFIERING av PAC-URL och filnedladdning. PAC-filen cachelagras endast i minnet och tas bort när programmet stänger sessionshandtaget.

På grund av prestandapåverkan av autoproxy rekommenderar vi att endast skrivbordsklientprogram eller -tjänster använder funktionen. serverbaserade program bör förlita sig på serveradministratören med hjälp av verktyget "ProxyCfg.exe".