Notes on Proxy AutoConfiguration Scripts

I had someone ask me for help writing a Proxy AutoConfiguration script today.  PAC files are basically simple JavaScript files that expose one function, FindProxyForURL(url, host) . The function returns a string containing a list of one or more proxies which should be used when sending requests to the specified url/hostname. If no proxy should be used, the function returns "DIRECT." 

A few notes:

  • By default, failure to download the policy is silent, but the DisplayScriptDownloadFailureUI policy may be set to inform the user in the event of failure.
  • PAC files may be either manually specified (Tools / Internet Options / Connections / Lan Settings / Automatic configuration script) or automatically discovered using WPAD (controlled via the "Automatically Detect Settings" checkbox on the same dialog).
  • Results of the function are cached by default for performance reasons.
  • Back in the Vista timeframe, the WinINET team added some new functionality to ensure that PAC files could properly work in an IPv6 environment.  A summary of their changes can be found in this blog post: https://blogs.msdn.com/wndp/articles/IPV6_PAC_Extensions_v0_9.aspx
  • As an aside: PAC files can have an (often unexpected) impact on Zone Determination, as I described almost 4 years ago (sheesh, time flies! ). 

-Eric