Fichier .PAC
Un fichier de Configuration Automatique de Proxy ou fichier.PAC (proxy auto-config) définit la façon selon laquelle un navigateur web (ou d’autres fonctionnalités équivalentes, regroupées sous le nom de User agents) se connecte à Internet : il leur permet d’utiliser automatiquement le proxy approprié à l’URL demandée.
Le navigateur va chercher ce fichier PAC en priorité. Les URL qu’il contient peuvent être configurées manuellement, ou déterminées automatiquement par le WPAD (Web Proxy Autodiscovery Protocol (en)[1]).
Un fichier PAC contient une fonction en JavaScript appelée "FindProxyForURL(url, host)". Cette fonction retourne une chaîne de caractères avec une ou plusieurs spécifications (règles) sur la façon d'y accéder. Ces règles amènent le navigateur web à utiliser un serveur proxy particulier ou à se connecter directement.
Si un proxy spécifié dans le fichier .PAC​
tombe, il peut paralyser la navigation. C'est la raison pour laquelle il faut toujours prévoir dans le fichier .PAC​
une seconde règle si la première ne peut être suivie.
Contexte
Les navigateurs modernes possèdent plusieurs niveaux de réglages automatiques : les utilisateurs peuvent choisir le niveau approprié à leurs besoins. Les fonctions suivantes sont couramment utilisées :
- Manual proxy selection : spécifie un nom de domaine (hostname) et un numéro de port standard pour toutes les URLs. La plupart des navigateurs permettent de spécifier une liste de domaines qui pourront contourner le proxy.
- Proxy auto-configuration (PAC) : spécifie les URL pour un fichier PAC avec une fonction en JavaScript qui détermine le proxy approprié pour chaque URL.
Cette fonction sert surtout aux utilisateurs d'ordinateurs portables, qui ont besoin de plusieurs configurations de proxy, et aux grandes sociétés ou complexes collectifs possédant plusieurs proxies différents.
Le fichier PAC
Pour utiliser un fichier PAC, il doit être publié sur un serveur Web ; le navigateur doit ensuite être configuré pour l'utiliser. Il est possible d’entrer manuellement les URL à traiter dans les réglages de la connexion proxy du navigateur ou bien de se 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 :
- URL : l'URL de l'objet
- HOST : le nom de domaine dérivé de l'URL
Par convention, on nomme ce fichier proxy.pac. Microsoft (WPAD) utilise wpad.dat pour le standard WPAD (en).
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";
}
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écute une requête 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 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 ce comportement, la recherche automatique de proxy est désactivable 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 compatibilité 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 gèrent la tolérance de pannes. Par exemple, si deux proxys sont en service et que l’un doit être utilisé prioritairement, le second ne devant prendre le relai que si le premier ne fonctionne plus, la syntaxe suivante répond au besoin :
return "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";
Notes et références
- Technologie Microsoft
Annexes
Liens externes
- (en) Jonathan de Boyne Pollard, « Automatic proxy HTTP server configuration in web browsers », Frequently Given Answers,
- (en) Navigator Proxy Auto-Config File Format (from the Release Notes for Netscape Navigator 2.0).
- (en) Using the Client Autoconfiguration File (Chapter 11 of Netscape Proxy Server Administrator's Guide, version 3.5 for Unix)
- (en) Description of proxy auto-configuration files from Microsoft
- (en) PAC File & WPAD Examples
- (en) pacparser C and Python library to parse PAC files.
- (en) Pactester A tool to test PAC files.
- (en) PAC-file to filter bad hosts and pornography.
- (en) Proxy Auto Config "how to". Fully working examples including anti-ad and anti-adult filter rules.