Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Waarschuwing
De buiten gebruik gestelde, niet meer ondersteunde Internet Explorer 11-desktoptoepassing is permanent uitgeschakeld via een Microsoft Edge-update op bepaalde versies van Windows 10. Zie Veelgestelde vragen over buitengebruikstelling van bureaublad-apps in Internet Explorer 11 voor meer informatie.
In dit onderwerp wordt uitgelegd hoe u de prestaties van een automatisch proxyconfiguratiescript (PAC-bestand, ook wel bekend als Wpad.dat) optimaliseert. Dit document richt zich op het direct oplossen van problemen met de intranetservers en het afhandelen van extern intern verkeer via een proxyserver.
Zie voor meer informatie over de functies die worden gebruikt om een adres (URL of hostnaam) te evalueren: Proxy autoconfiguration -bestanden (.pac) gebruiken met IEAK 11.
Notitie
De functies isInNet()
, isResolvable()
en dnsResolve()
verzenden queries naar het DNS-subsysteem. Daarom moet u het gebruik van deze functies vermijden of ten minste minimaliseren.
Query uitvoeren op NetBIOS-namen
NetBIOS-namen (servernamen die geen punt bevatten) worden alleen in het intranet gebruikt en worden niet via de proxy gerouteerd.
if (isPlainHostName(host))
return "DIRECT";
Query uitvoeren op interne DNS-achtervoegsels
Intern gebruikte DNS-zones worden doorgaans rechtstreeks gerouteerd. De eenvoudigste manier om dergelijke hosts te bepalen, is door de dnsDomainis
functie te gebruiken:
if (dnsDomainIs(host, ".dns.company.com"))
return "DIRECT";
Een alternatieve en snellere methode voor hetzelfde resultaat kan worden verkregen met behulp van ShExMatch()
. Deze functie vergelijkt tekenreeksen. Het retourneert hetzelfde resultaat, maar voegt een sterretje (*) toe als jokerteken:
if (shExpMatch(host, "*.dns.company.com"))
return "DIRECT";
Query uitvoeren op IP-bereiken
Als het IP-adres van de host deel uitmaakt van het lokale intranet, ongeacht de naam van de webserver, moet de proxy worden omzeild om rechtstreeks te navigeren.
Als het IP-adres rechtstreeks in de adresbalk wordt ingevoerd, hoeft u het niet opnieuw op te lossen. U kunt de volgende code gebruiken om te controleren of de host al de IP-adresindeling heeft:
var isIpV4Addr = /^(\d+.){3}\d+$/;
ret = isIpV4Addr.test(host);
Met deze code wordt gecontroleerd of de variabelehost drie cijfers bevat die worden gevolgd door een punt en vervolgens door een andere numerieke waarde. Het resultaat wordt vervolgens doorgegeven aan de variabele return. Het resultaat is 'true' voor een IP-adres en 'false' anders.
In het volgende codefragment bevat het host-IP-adres van de variabele het IP-adres voor gebruik in toekomstige controles:
var hostIP;
var isIpV4Addr = /^(\d+.){3}\d+$/;
if (isIpV4Addr.test(host))
hostIP = host;
else
hostIP = dnsResolve(host);
Wanneer een niet-bestaande host wordt doorgegeven aan de functie (de gebruiker heeft bijvoorbeeld iets verkeerds ingevoerd in de adresbalk), kan het resultaat in host-IP nul zijn. Eventuele aanvullende foutafhandeling wordt uitgevoerd door de proxy:
if (hostIP==0)
return "PROXY myproxy:80";
Omdat we het IP-adres van de host hebben, moeten de interne IP-bereiken worden gecontroleerd.
Gebruik waar mogelijk de shExpMatch
functie in plaats van isInNet
. De volgende codefragmenten hebben identieke resultaten, hoewel shExpMatch
deze sneller worden uitgevoerd:
if (isInNet(hostIP, "95.53.0.0", "255.255.0.0"))
return "DIRECT";
if (shExpMatch(hostIP, "95.53.*"))
return "DIRECT";
JavaScript is hoofdlettergevoelig
Het proxyscript maakt gebruik van de JavaScript-taal. JavaScript is hoofdlettergevoelig. Daarom zal een if
clausule in hoofdletters nooit waar worden, terwijl andere parameters kleine letters gebruiken. Internet Explorer zet de variabelen host
zelf om in url
kleine letters voordat de FindProxyForURL
functie wordt aangeroepen.
Deze voorwaarde geldt niet voor WinHTTP
. Dit komt doordat WinHTTP
de host
en de url
rechtstreeks aan de functie worden doorgegeven.
Daarom moeten de parameters die in het PAC-bestand worden gecontroleerd, worden geconverteerd binnen het PAC voordat ze worden geƫvalueerd:
host = host.toLowerCase();
IPv6 gebruiken
Als u IPv6-adressen wilt gebruiken en verwerken, ondersteunt Internet Explorer deze omdat Internet Explorer is opgenomen in elke momenteel ondersteunde Windows-versie (en in WinHTTP sinds Windows Vista). In dit geval moet u echter 'Ex'-functies (zoals isInNetEx()
), zoals vermeld in het volgende artikel gebruiken:
Api-definities voor IPv6-compatibele proxy's
Zie 'myIpAddress'-myIpAddressEx
voor een voorbeeld van de implementatie.
Een PAC-bestand testen
Als het script een syntaxisfout bevat (bijvoorbeeld een ontbrekend ")" teken in een if
instructie), wordt het script niet uitgevoerd. Als u fouten wilt minimaliseren, kunt u overwegen een scripteditor te gebruiken waarmee syntaxiscontrole wordt uitgevoerd. Met Behulp van Visual Studio kunt u de extensie van het PAC-bestand wijzigen in '.js' tijdens het bewerken, maar de naam ervan weer wijzigen in .pac voordat u het uploadt naar de webserver.
Notitie
Vanaf Windows 10 kunt u bestandgebaseerde PAC-bestanden niet meer gebruiken. Raadpleeg voor meer informatie de volgende artikelen:
Testen met Autoprox.exe
Soms moet u het PAC-bestand testen, zelfs als u geen toegang tot de website hebt. Hiervoor kunt u het opdrachtregelprogramma Autoprox.exe gebruiken.
Als u het hulpprogramma opent binnen een opdracht zonder extra parameters te gebruiken, wordt de volgende uitvoer met de helpinformatie weergegeven.
C:\temp>autoprox
Help for AUTOPROX.EXE
Version : 2.44 (12/16/2019)
Usage : AUTOPROX -a (calling DetectAutoProxyUrl and saving wpad.dat file in temporary file if success)
Usage : AUTOPROX -n (calling DetectAutoProxyUrl with PROXY_AUTO_DETECT_TYPE_DNS_A only and saving wpad.dat file in temporary file if success)
Usage : AUTOPROX [-o] [-d] [-v] [-u:url] [-p:Path to autoproxy file] [-i:IP address]
-o: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX
-i:IP Address: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX and using provided IP Address
-v: verbose output for helper functions
For debugging: -d plus HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug=1
AUTOPROX -u:url: calling DetectAutoProxyUrl and using autoproxy file to find the proxy for the url
AUTOPROX -u:url -p:path: using the autoproxy file/url from the path to find proxy for the url
Example: autoprox http://www.microsoft.com -> calling DetectAutoProxyUrl and using WPAD if found
Example: autoprox -o -u:http://www.microsoft.com -p:c:\inetpub\wwwroot\wpad.dat
Example: autoprox -u:http://www.microsoft.com -p:http://proxy/wpad.dat
Example: autoprox -d -u:http://www.microsoft.com -p:http://proxy/wpad.dat
Dit is de uitvoer als deze gebruikmaakt van ons voorbeeld:
C:\temp>autoprox -u:https://us.msn.com -p:c:\temp\sample.pac
Searching proxy for url : https://us.msn.com
Searching proxy using file : c:\temp\sample.pac
The Winsock 2.2 dll was found okay
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
Calling InternetGetProxyInfo for url https://us.msn.com and host us.msn.com
Proxy returned for url https://us.msn.com is:
PROXY myproxy:80;
Foutafhandeling in Autoprox.exe
Als het PAC-bestand syntaxisfouten bevat, ontvangt u het volgende bericht:
FOUT: InternetGetProxyInfo is mislukt met foutnummer 0x3eb 1003.
Nadat u de lokale test hebt voltooid, moet u het PAC-bestand kopiƫren naar de webserver waarop het wordt geopend via het HTTP-protocol.
Voorbeeld:
function FindProxyForURL(url, host) {
// NetBIOS-names
if (isPlainHostName(host))
return "DIRECT";
// change to lower case, if not already been done
host = host.toLowerCase();
// internal DNS-suffixes
if (shExpMatch(host, "*.corp.company.com") ||
shExpMatch(host, "*.dns.company.com"))
return "DIRECT";
// Save the IP-address to variable hostIP
var hostIP;
var isIpV4Addr = /^(\d+.){3}\d+$/;
if (isIpV4Addr.test(host))
hostIP = host;
else
hostIP = dnsResolve(host);
// IP could not be determined -> go to proxy
if (hostIP == 0)
return "PROXY myproxy:80";
// These 3 scopes are used only internally
if (shExpMatch(hostIP, "95.53.*") ||
shExpMatch(hostIP, "192.168.*") ||
shExpMatch(hostIP, "127.0.0.1"))
return "DIRECT";
// Eveything else goes through the proxy
return "PROXY myproxy:80;";
}
Contactverantwoordelijkheid van derden
Microsoft biedt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert niet de nauwkeurigheid van contactgegevens van derden.