Proxy Auto-Config
Anhand einer Proxy-Auto-Config-Datei (PAC-Datei) kann ein Webbrowser automatisch den passenden Proxyserver für eine gewünschte URL finden.
Eine PAC-Datei enthält eine JavaScript-Funktion FindProxyForURL(url, host)
. Diese Funktion gibt einen String mit einer oder mehreren Proxyspezifikationen zurück; mit mehreren Spezifikationen wird ein Fallback bzw. Failover für den Fall möglich, dass ein Server nicht antwortet. Der Browser holt sich diese PAC-Datei, bevor er weitere Seiten anfordert. Die URL der PAC-Datei kann entweder von Hand angegeben werden oder über das Web Proxy Autodiscovery Protocol automatisch gefunden werden.
Zusammenhang
Moderne Browser bieten mehrere Möglichkeiten der Konfiguration – so kann die Art gewählt werden, die den jeweiligen Bedürfnissen entspricht. Es handelt sich üblicherweise um folgende Möglichkeiten:
- Manuelle Proxy-Wahl: Es wird ein Hostname sowie eine Port-Nummer angegeben, die für alle URLs verwendet werden. Meist können noch Domains wie z. B. der eigene Rechner (localhost) aufgelistet werden, für die der Proxy umgangen wird.
- Proxy auto-configuration (PAC): Durch die Angabe der URL einer PAC-Datei wird die Verwendung eines passenden Proxys für jede URL möglich. Sie enthält eine JavaScript-Funktion, die zu jeder Adresse den passenden Proxy aussucht. Diese Möglichkeit behandelt dieser Artikel.
- Web Proxy Autodiscovery Protocol (WPAD Protocol): Der Browser sucht sich die PAC-Datei selbst. Das Protokoll wird in einem gesonderten Artikel besprochen.
Die erste Möglichkeit ist die einfachste.
Die zweite (PAC) ist flexibler (erlaubt die Verwendung vieler verschiedener Proxys). Die URL der PAC-Datei muss jedoch einmal initial von Hand angegeben werden.
Die dritte Möglichkeit (WPAD) baut auf PAC auf und macht diese Handarbeit unnötig: Jeder Browser einer Organisation kann damit angewiesen werden, dieselbe PAC-Konfiguration zu verwenden.
Die PAC-Datei
Um PAC zu nutzen, werden PAC-Dateien üblicherweise auf Webservern veröffentlicht und der partizipierende Browser angewiesen, sie durch die Angabe der entsprechenden Adresse in den Konfigurations-Einstellungen oder durch Nutzung des WPAD-Protokolls zu lesen. Zu Testzwecken oder aus anderen Gründen kann eine PAC-Datei aber auch durchaus lokal gehalten werden.
Eine PAC-Datei ist eine Textdatei, die eine JavaScript-Funktion definiert: FindProxyForURL(url, host)
. Standardmäßig heißt sie proxy.pac, wird der WPAD-Standard genutzt, so heißt sie oft auch wpad.dat. Der Server muss angewiesen werden als MIME-Type der Datei application/x-ns-proxy-autoconfig anzugeben.
Ein sehr einfaches Beispiel einer PAC-Datei ist:
function FindProxyForURL(url, host) { return "PROXY proxy.example.com:8080; DIRECT"; }
Diese Funktion weist den Browser an, alle Seitenanfragen an den Proxy auf Port 8080 des Servers proxy.example.com zu leiten. Sollte dies fehlschlagen, so wird eine direkte Verbindung ins WWW aufgebaut.
Das Folgende ist ein komplexeres Beispiel, das die Verwendung einiger JavaScript-Funktionen demonstriert, die für die FindProxyForURL
-Funktion zur Verfügung stehen:
function FindProxyForURL(url, host) {
// Adressen, die auf example.com liegen, brauchen keinen Proxy:
if (shExpMatch(host,"*.example.com")) {
return "DIRECT";
}
// URLs innerhalb dieses Netzwerkes werden abgefragt über
// Port 8080 auf fastproxy.example.com: (macht Nameserver Anfrage)
if (isInNet(host, "10.0.0.0", "255.255.248.0")) {
return "PROXY fastproxy.example.com:8080";
}
// Alle anderen Anfragen gehen über Port 8000 von proxy.example.com.
// sollte das fehlschlagen, verbinde direkt ins Netz:
return "PROXY proxy.example.com:8000; DIRECT";
}
Einschränkungen
Die Funktion isInNet
(und weitere ähnliche Funktionen) führen eine DNS-Anfrage durch, die den Browser blockieren kann, falls der DNS-Server nicht antwortet. Diese Funktion ist zudem auf Windows-Systemen selbst bei guter Erreichbarkeit recht „teuer“, Zugriffe auf Netzressourcen können so verlangsamt werden.
Die Proxy-Zwischenspeicherung in Microsofts Internet Explorer schränkt die Flexibilität des PAC-Standards ein. Folglich kann ein Proxy anhand des Domainnamens, jedoch nicht des Pfades der URL gewählt werden. Andernfalls muss die Proxy-Zwischenspeicherung abgeschaltet werden.
Prinzipiell kann ein PAC-File auch auf dem Server dynamisch generiert werden.