Pour utiliser un fichier PAC, vous devez le publier sur un serveur Web et dire au navigateur de l'utiliser. Vous pouvez entrer manuellement les URLs à traiter dans les réglages de la connexion proxy de votre navigateur ou bien vous servir du protocole WPAD.
Un fichier PAC est un fichier texte en Javascript, qui contient entre autres la fonction FindProxyForURL(url, host). Cette fonction possède deux arguments associés :
Par convention, on nomme ce fichier proxy.pac. Microsoft (WPAD) utilise wpad.dat pour le standard WPAD.
Même si la majorité des clients traite le script sans tenir compte du type MIME retourné dans la requête HTTP, il convient de forcer le serveur web à le déclarer (application/x-ns-proxy-autoconfig ou application/x-javascript-config), ceci pour des raisons de clarté et de compatibilité.
S'il n'y a pas de raison de favoriser l'usage d'un type MIME par rapport à un autre, il est néanmoins raisonnable de supposer que application/x-ns-proxy-autoconfig sera acceptée par plus de clients que application/x-javascript-config ainsi qu'il est expliqué dans les spécifications originales de Netscape.
Exemples
- Voici un exemple très simple de fichier PAC:
function FindProxyForURL(url, host) { return "PROXY proxy.example.com:8080; DIRECT"; }
Cette fonction force le navigateur à récupérer toutes les pages au moyen du port 8080 du proxy (proxy.example.com). Si ce proxy tombait ou cessait de répondre, le navigateur contacterait le serveur WWW directement, sans utiliser un proxy.
- Voici un exemple plus complexe pour montrer une fonction Javascript disponible dans la fonction FindProxyForURL:
function FindProxyForURL(url, host) { // our local URLs from the domains below example.com don't need a proxy: if (shExpMatch(url,"*.example.com/*")) {return "DIRECT";} if (shExpMatch(url, "*.example.com:*/*")) {return "DIRECT";} // URLs within this network are accessed through // port 8080 on fastproxy.example.com: if (isInNet(host, "10.0.0.0", "255.255.248.0")) { return "PROXY fastproxy.example.com:8080"; } // All other requests go through port 8080 of proxy.example.com. // should that fail to respond, go directly to the WWW: return "PROXY proxy.example.com:8080; DIRECT"; }
Restrictions
Codage du fichier PAC
Les navigateurs comme Firefox ou IE ne supportent que le langage par défaut du fichier PAC. Ils ne supportent pas des langages Unicode comme UTF-8.
Résolution Dns
La fonction dnsResolve (et les autres fonctions similaires) exécutent un check DNS qui peut bloquer votre navigateur pendant un long moment si le serveur DNS ne répond pas.
Se servir des résultats de l'autoconfiguration de proxy selon le nom de domaine avec la version 5.5 d'IE (ou une version supérieure) limite la flexibilité du PAC standard. En effet, il peut vous faire choisir le meilleur proxy en se basant sur le nom de domaine demandé, sans prendre en compte le chemin de l'URL. Afin d'éviter ça, vous pouvez désactiver la recherche automatique de proxy dans la base de registre.
Il est recommandé de toujours utiliser l'adresse IP au lieu des noms de domaines dans la fonction, afin de veiller à la comptabilité avec les autres composants Windows qui utilisent la configuration les réglages PAC d'Internet Explorer, comme .NET 2.0 Framework.
Par exemple :
if (isInNet(host, dnsResolve(sampledomain) , "255.255.248.0") // .NET 2.0 will resolve proxy properly if (isInNet(host, sampledomain, "255.255.248.0") // .NET 2.0 will not resolve proxy properly
La convention actuelle est de refuser de rediriger une connexion lorsqu'un fichier PAC est indisponible.
D'autres restrictions sont signalées dans la machine java sur le poste local.
Fonctionnalités avancées
D'autres fichiers PAC plus complexes peuvent réduire la charge des proxies, faire de la répartition de charge (load balancing), de la continuité de service, ou de la black listing (Liste noire) ou white listing (Liste blanche) avant que la requête tape les proxies. L'une d'elles peut retourner plusieurs proxies :
return "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";