Fichier .PAC

fichier de configuration

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

modifier

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.

  • Web Proxy Autodiscovery Protocol (WPAD) : Laisse le navigateur découvrir l'emplacement du fichier PAC grâce aux fonctions du DHCP et du DNS.

Le fichier PAC

modifier

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

modifier
  • 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

modifier

Codage du fichier PAC

modifier

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

modifier

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

modifier

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

modifier
  1. Technologie Microsoft

Annexes

modifier

Liens externes

modifier