Ein kleines Team für Preisüberwachung trägt einen Residential-Proxy als System-Proxy in Windows ein. Einige Tage später zeigt die Nutzungsübersicht weit mehr Gigabyte, als der Job brauchen dürfte. Browser-Updates, Videoanrufe und Webmail liefen ebenfalls über den Proxy, obwohl nur zwei Shops von Wettbewerbern von einer anderen IP-Adresse aus aufgerufen werden sollten. Das Team brauchte eine Regel, die sagt: „diese Websites über den Proxy, alles andere direkt“. Diese Regel ist eine PAC-Datei.
Dieser Leitfaden erklärt, was eine PAC-Datei (Proxy-Auto-Config-Datei) ist, wie ein Browser sie ausführt und was FindProxyForURL zurückgeben darf. Er behandelt die Hilfsfunktionen und ihre Fallen, ein getestetes Beispiel, das nur Zielseiten über einen Proxy leitet, WPAD und seine Risiken, den Grund, warum die Datei kein Passwort enthalten kann, und wie dieselbe Regel den Proxy-Traffic senkt.
Was ist eine PAC-Datei?
Eine PAC-Datei ist eine JavaScript-Datei im Klartext, die eine einzige Funktion definiert: FindProxyForURL(url, host). Die Funktion erhält die Adresse, die der Browser gleich öffnen will, und gibt einen String zurück, der den Weg benennt. Netscape führte die automatische Proxy-Konfiguration mit Navigator 2.0 ein, derselben Version, die auch JavaScript brachte.
Für PAC gibt es weder einen RFC noch eine formale Spezifikation. Jeder Browser bringt seine eigene Implementierung mit, und die Details unterscheiden sich. Die PAC-Referenz von MDN beschreibt die gemeinsame Basis, darunter den MIME-Typ application/x-ns-proxy-autoconfig. Die Datei endet meist auf .pac; wird sie über WPAD gefunden, heißt sie wpad.dat.
Eine manuelle Proxy-Einstellung schickt den gesamten Verkehr an einen Proxy. Eine PAC-Datei entscheidet bei jeder Anfrage neu, sodass derselbe Browser einen Shop über einen Proxy und das Büro-Wiki direkt erreichen kann.
Wie nutzt ein Browser eine PAC-Datei?
- Datei abrufen. Der Browser lädt sie von der eingetragenen Adresse herunter oder von der Adresse, die WPAD gefunden hat. Chrome ruft sie direkt ab, nie über einen Proxy, und braucht innerhalb von 30 Sekunden eine HTTP-Antwort
200mit einem Body unter 1 MB. - Funktion vor jeder Anfrage aufrufen. Bei
https://-Adressen entfernt Chrome vorher Pfad und Query, die Funktion sieht alsohttps://store.example/statt der vollständigen Adresse. Chrome tut das seit Version 52, und seit Version 75 lässt es sich nicht mehr abschalten. - Antwort von links nach rechts lesen. Der String wird an den Semikolons geteilt. Der Browser probiert den ersten Eintrag und geht nur dann zum nächsten, wenn dieser Proxy nicht erreichbar ist.
- Einen ausgefallenen Proxy zurückstellen. Er rückt für eine Weile ans Ende der Liste. Wie lange, hängt vom Browser ab; bauen Sie also keine Regeln um eine feste Zeitspanne herum.
- Ohne Datei ausweichen. Kann Chrome die Datei nicht abrufen, geht es ohne Warnung zur nächsten Option über, meist einer direkten Verbindung. Nur ein als verpflichtend markiertes PAC-Skript lässt die Anfragen stattdessen scheitern. In unserem Test schickte auch eine Datei mit Syntaxfehler Chrome auf die direkte Verbindung.
Die vollständigen Regeln stehen in der Proxy-Dokumentation von Chromium.
Was kann FindProxyForURL zurückgeben?
Die Funktion gibt einen einzigen String zurück. Jeder Eintrag besteht aus einem Schlüsselwort, bei Proxys gefolgt von host:port.
| Rückgabewert | Was er bewirkt | Unterstützung (Quelle) | Achtung |
|---|---|---|---|
DIRECT | Verbindet ohne Proxy | Standard-Schlüsselwort (MDN) | Als Reserve in einer Zielregel sendet er die Anfrage von Ihrer echten IP |
PROXY pr.proxynet.io:8000 | Nutzt einen HTTP-Proxy | Standard-Schlüsselwort (MDN, Chromium) | Verlangt der Proxy ein Passwort, zeigt der Browser einen 407-Anmeldedialog |
SOCKS5 pr.proxynet.io:1080 | Nutzt einen SOCKS5-Proxy | Chrome und Firefox (Chromium, MDN) | Chrome sendet keine SOCKS5-Zugangsdaten, der Proxy muss Ihre IP zulassen |
HTTPS proxy.example:443 | Nutzt einen Proxy, den Sie über TLS erreichen | Chrome und Firefox (Chromium, MDN) | Der Proxy muss auf diesem Port TLS sprechen |
SOCKS proxy.example:1080 | Nutzt einen SOCKS-Server | Standard-Schlüsselwort (MDN) | Chrome liest ein bloßes SOCKS als SOCKS4 |
Firefox akzeptiert außerdem HTTP host:port und SOCKS4 host:port, doch der Parser von Chrome kennt HTTP nicht; PROXY ist daher die Schreibweise, die überall funktioniert. Chrome liest Schlüsselwörter in beliebiger Groß- und Kleinschreibung; MDN schreibt sie groß, und wir tun es auch.
Eine Kette wie "PROXY a.example:8000; PROXY b.example:8000; DIRECT" bedeutet: erst den ersten Proxy probieren, dann den zweiten, und nur wenn beide ausgefallen sind, direkt verbinden. Dieser letzte Schritt ist beim normalen Surfen in Ordnung und bei der Datenerfassung falsch. Den Protokollunterschied zwischen den beiden Proxy-Typen erklärt SOCKS und HTTP Proxy im Vergleich.
Welche Hilfsfunktionen kann eine PAC-Datei nutzen?
Die eingebauten Funktionen lassen sich in zwei Gruppen teilen.
String-Prüfungen, schnell und sicher: shExpMatch (Muster im Shell-Stil mit * und ?), dnsDomainIs, isPlainHostName (kein Punkt im Namen), localHostOrDomainIs, dnsDomainLevels sowie die Zeitfunktionen weekdayRange, dateRange und timeRange.
Funktionen, die DNS fragen: dnsResolve, isResolvable und isInNet, sofern es einen Hostnamen statt einer IP-Adresse erhält. MDN warnt, dass diese Funktionen den DNS-Server befragen müssen und selten nötig sind.
Drei häufige Fallen haben wir mit pacparser geprüft, das PAC-Dateien in der QuickJS-Engine ausführt:
dnsDomainIs(host, "shop.example")vergleicht nur das Ende des Strings, also passt auchevilshop.example.dnsDomainIs(host, ".shop.example")behebt das, aber das bloßeshop.examplepasst dann nicht mehr. Prüfen Sie beides:host === "shop.example" || dnsDomainIs(host, ".shop.example").shExpMatch(host, "*.panel.example")passt nicht aufpanel.exampleselbst.
myIpAddress() kann auf einem Rechner mit mehreren Netzwerkschnittstellen die falsche Adresse liefern; vermeiden Sie daher Regeln, die von der eigenen IP des Rechners abhängen.
So schreiben Sie eine PAC-Datei, die nur Zielseiten über einen Proxy leitet
Hier ist das Szenario aus der Einleitung als eine einzige Datei. Ziele der Preisüberwachung und ihre Subdomains laufen über einen Residential-Proxy. Ein Dashboard, das eine feste Adresse behalten muss, läuft über einen SOCKS5-Proxy, mit einem HTTP-Proxy als Reserve. Alles andere geht direkt. Ersetzen Sie die .example-Domains durch Ihre eigenen.
// proxy.pac: Nur die aufgeführten Websites nutzen einen Proxy, alles andere geht direkt.
function FindProxyForURL(url, host) {
host = host.toLowerCase();
// 1. Einfache Namen (Intranet, Drucker) und localhost: immer direkt.
if (isPlainHostName(host) || host === "localhost") {
return "DIRECT";
}
// 2. Private und Loopback-IP-Adressen: direkt. Durch die Regex-Prüfung
// sieht isInNet immer nur eine IP-Adresse und fragt daher nie DNS.
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(host) &&
(isInNet(host, "10.0.0.0", "255.0.0.0") ||
isInNet(host, "172.16.0.0", "255.240.0.0") ||
isInNet(host, "192.168.0.0", "255.255.0.0") ||
isInNet(host, "127.0.0.0", "255.0.0.0"))) {
return "DIRECT";
}
// 3. Ziele der Preisüberwachung und ihre Subdomains: Residential-Proxy.
// Kein "; DIRECT" am Ende: Ist der Proxy ausgefallen, schlägt die Anfrage
// fehl, statt von Ihrer eigenen IP-Adresse aus zu gehen.
var targets = ["shop.example", "store.example"];
for (var i = 0; i < targets.length; i++) {
if (host === targets[i] || dnsDomainIs(host, "." + targets[i])) {
return "PROXY pr.proxynet.io:8000";
}
}
// 4. Ein Dashboard, das eine feste IP behalten muss: zuerst SOCKS5, HTTP als Reserve.
// Tragen Sie hier Host und Ports Ihres statischen ISP-Proxys ein.
if (host === "panel.example" || shExpMatch(host, "*.panel.example")) {
return "SOCKS5 pr.proxynet.io:1080; PROXY pr.proxynet.io:8000";
}
// 5. Alles andere: direkt.
return "DIRECT";
}Der Host wird zuerst in Kleinbuchstaben umgewandelt, weil die Hilfsfunktionen Strings exakt vergleichen. isInNet läuft erst, nachdem die Regex eine IP-Adresse bestätigt hat, sodass das Skript nie auf DNS wartet. Der Code bleibt bei var und einfachen Schleifen, weil nicht jede PAC-Engine modernes JavaScript ausführt. In einer PAC-Datei ist die Semikolon-Kette der Mechanismus für Wiederholungen; Wiederholungslogik im Code gehört in den Scraper (HTTP-Statuscodes beim Web Scraping).
So haben wir es getestet
Wir haben die Datei mit pacparser 1.5.2 unter Python 3.13 gegen zehn Hosts laufen lassen, und jeder lieferte den erwarteten Weg, darunter WWW.Shop.Example (Proxy) und notshop.example (direkt). Danach haben wir sie lokal mit dem Typ application/x-ns-proxy-autoconfig bereitgestellt, die Endpunkte auf zwei lokale Test-Proxys gerichtet und Chrome 154 mit --proxy-pac-url geöffnet. Ziel-Hosts erreichten den HTTP-Proxy, andere Hosts gingen direkt. Beim Dashboard versuchte Chrome zuerst SOCKS5, bot dabei nur die Methode „keine Authentifizierung“ an und wechselte dann zur HTTP-Reserve. Eine Kopie mit einer fehlenden geschweiften Klammer schickte jede Anfrage ohne Warnung direkt.
Wie tragen Sie eine PAC-Datei auf einem Gerät oder im Browser ein?
Stellen Sie die Datei über einen Webserver bereit, wo möglich über HTTPS, mit dem Content-Type, den MDN verlangt. Tragen Sie dann ihre Adresse ein:
- Windows: der Schalter Setupskript verwenden; die Schritte stehen in Proxy-Einstellungen in Windows und Chrome.
- Mac: die Zeile Automatische Proxy-Konfiguration; siehe wann Sie sie auf dem Mac nutzen.
- Android: die Option Autom. Proxykonfiguration im WLAN-Netz (Proxy-Einstellungen unter Android).
- Firefox: Automatische Proxy-Konfigurations-Adresse in den Verbindungseinstellungen (Proxy-Einstellungen in Firefox).
Um in einem Browser zwischen einigen Profilen zu wechseln, ist eine Erweiterung oft einfacher (SwitchyOmega). Wenn Sie auf einem Arbeitsrechner eine PAC-Adresse gefunden haben, lesen Sie, wie Sie die Adresse eines Proxy-Servers finden.
Was ist WPAD und warum ist es ein Risiko?
WPAD (Web Proxy Auto-Discovery) steckt hinter dem Schalter „Einstellungen automatisch erkennen“: Der Client sucht im Netzwerk nach einer PAC-Datei. Der WPAD-Entwurf von 1999 nennt mehrere Suchmethoden, und Clients nutzen vor allem zwei: DHCP-Option 252, die die URL verteilt, und DNS-Abfragen nach einem Host namens wpad. Ein Rechner namens pc1.sales.corp.example fragt nach wpad.sales.corp.example, dann nach wpad.corp.example, und fordert /wpad.dat beim ersten Namen an, der antwortet. Chrome probiert DHCP vor DNS, unterstützt die DHCP-Methode aber nur unter Windows und ChromeOS. Der Entwurf lief aus, ohne zu einem RFC zu werden.
Der Client vertraut dem, der antwortet. Tritt ein Laptop mit automatischer Erkennung einem Café-Netz bei oder gelangt seine WPAD-Abfrage ins öffentliche DNS, kann der Server eines Fremden ihm eine PAC-Datei liefern und seinen Verkehr umleiten. Die CISA-Warnung TA16-144A erklärt, wie neue Top-Level-Domains solche Namenskollisionen erleichtert haben.
So schützen Sie Ihre Rechner:
- Schalten Sie die automatische Erkennung dort ab, wo sie nicht gebraucht wird, vor allem auf Laptops, die das Büro verlassen.
- Tragen Sie die PAC-Adresse ausdrücklich ein, über HTTPS.
- Setzen Sie unter Windows 10 Version 1809, Windows Server 2019 und neuer den Registry-Wert
DisableWpadauf1, wie Microsoft beschreibt, und schalten Sie die Erkennung zusätzlich in den Einstellungen ab, weil Browser diesen Schalter lesen. - Protokollieren und blockieren Sie ausgehende Anfragen nach
wpad.datan der Firewall, wie die CISA empfiehlt (Proxy und Firewall).
Warum kann eine PAC-Datei keinen Benutzernamen und kein Passwort enthalten?
Eine PAC-Datei beantwortet eine einzige Frage: Wohin soll diese Anfrage gehen? Sie gibt ein Schlüsselwort, einen Host und einen Port zurück und hat kein Feld für Zugangsdaten.
Verlangt ein HTTP-Proxy ein Passwort, antwortet er mit 407, und der Browser zeigt einen Anmeldedialog. Chrome unterstützt für SOCKS5 keine Authentifizierungsmethode, ein SOCKS5-Eintrag funktioniert also nur, wenn der Proxy Ihre IP hereinlässt. Für automatisierte Jobs und SOCKS5 ist die Authentifizierung per IP-Whitelist der praktische Weg: Sie tragen Ihre ausgehende IP in die Liste erlaubter Adressen in Ihrem Proxy-Konto ein. Schreiben Sie Zugangsdaten nicht als Notlösung in URLs. Beide Methoden, auch was bei einer Änderung Ihrer IP passiert, vergleicht Proxy-Authentifizierung: User:Pass oder IP-Whitelist.
Wie senkt eine PAC-Datei Proxy-Traffic und Kosten?
Residential- und Mobile-Proxys werden pro Gigabyte abgerechnet, ISP- und Datacenter-Proxys pro IP-Adresse. Mit einem systemweiten Proxy werden auch Updates, Videoanrufe und Downloads abgerechnet. Eine PAC-Datei leitet nur die Ziel-Domains über den Residential-Proxy, sodass die abgerechneten Gigabyte auf den Job entfallen.
Für ein Dashboard, das über Sitzungen hinweg eine feste Adresse behalten muss, passt ein Produkt mit Abrechnung pro IP besser: ein ISP-Proxy oder ein SOCKS5-Proxy mit freigegebener IP.
Anwendungsfälle
- Preisüberwachung: Nur die Shops, die Sie beobachten, laufen über den Proxy, im Rahmen ihrer
robots.txt-Regeln und mit maßvoller Anfragerate (Wettbewerberpreise überwachen). - Büronetze: Interne Adressen gehen direkt, externer Verkehr läuft über einen Firmen-Proxy wie Squid (Squid-Proxy einrichten).
- Länderspezifische Prüfungen: Jede Ziel-Domain erhält den Ausgangstyp, den sie braucht (Residential- und Datacenter-Proxy im Vergleich).
- Einen neuen Proxy testen: Eine Test-Domain läuft über ihn, während das normale Surfen direkt bleibt (wie Sie einen Proxy testen).
- Leak-Prüfungen: Eine PAC-Regel deckt Browseranfragen ab, doch WebRTC und DNS können Ihre Adresse trotzdem verraten (WebRTC- und DNS-Lecks).
- Lokale Proxys: Ein Debugging-Proxy auf
127.0.0.1:8080erhält nur die Domains, die Sie untersuchen (Port 8080).
Häufige Fehler
Diese Fehler sind typisch für PAC-Dateien; allgemeine Verbindungsfehler behandelt Proxy-Server reagiert nicht.
- Falscher MIME-Typ oder fehlende Datei. MDN verlangt, dass Server
application/x-ns-proxy-autoconfigsenden. Chrome braucht außerdem genau200; ein404ist ein gescheiterter Abruf und damit eine direkte Verbindung. - Nach einer Änderung passiert nichts. Browser halten das geladene Skript im Speicher. Nutzen Sie Neu laden in den Verbindungseinstellungen von Firefox, Re-apply settings auf
chrome://net-internals/#proxyoder starten Sie den Browser neu. - DNS im Skript aufrufen.
isInNetmit einem Hostnamen,dnsResolveundisResolvablelösen bei jeder Anfrage eine Abfrage aus, und ein langsamer DNS-Server lässt jede Seite warten. - Ein Syntaxfehler. Chrome geht ohne Meldung direkt. Testen Sie die Datei mit pacparser, bevor Sie sie ausrollen.
- Pfadregeln bei HTTPS.
shExpMatch(url, "*/products/*")passt in Chrome nie auf einehttps://-Adresse, weil der Pfad entfernt wird. In unserem Test passte dieselbe Art von Regel beihttp://. Werten Sie stattdessenhostaus. - Der Punkt in dnsDomainIs. Ohne ihn passen ähnlich aussehende Domains; mit ihm passt die bloße Domain nicht.
HTTP host:portoder ein bloßesSOCKSschreiben. Chrome lehnt das Erste ab und liest das Zweite als SOCKS4.- Eine
DIRECT-Reserve bei Zielen der Datenerfassung. Ist der Proxy ausgefallen, sieht die Website Ihre eigene IP.
Entscheidungshilfe
| Bedarf | Empfehlung |
|---|---|
| Nur einige Domains über einen Proxy leiten | Eine PAC-Datei: PROXY für die Ziele, DIRECT für den Rest |
| Den gesamten Browserverkehr über einen Proxy leiten | Keine PAC-Datei nötig; ein manueller System-Proxy reicht (Windows und Chrome) |
| Ihre echte IP darf eine Zielseite nie erreichen | Dafür nur PROXY zurückgeben, ohne ; DIRECT als Reserve |
| SOCKS5 in Chrome nutzen | SOCKS5 host:port zurückgeben und Ihre IP freigeben |
| Dieselbe PAC-Adresse auf jedem Bürorechner | Per Richtlinie oder Geräteverwaltung verteilen; wenn Sie WPAD nutzen, DHCP und DNS schützen |
| Ein Laptop arbeitet auch in Café- und Heimnetzen | Automatische Erkennung abschalten; unter Windows DisableWpad setzen |
| Ein Dashboard braucht in jeder Sitzung dieselbe IP | Diese Domain auf einen statischen ISP-Proxy leiten |
Häufige Fragen
Wie öffne oder bearbeite ich eine PAC-Datei?
Eine PAC-Datei ist reiner Text, also öffnet sie der Windows-Editor oder jeder Code-Editor. Ein Browser, der die URL öffnet, zeigt je nach MIME-Typ den Text an oder lädt die Datei herunter. Auch andere Formate nutzen die Endung .pac; sieht die Datei wie Binärdaten aus, ist sie keine Proxy-Konfiguration.
Wo liegt die PAC-Datei unter Windows?
Meist ist sie keine lokale Datei. Windows speichert die unter Setupskript verwenden eingetragene Adresse und ruft die Datei von dort ab. Wie Sie die Adresse ansehen oder ändern, steht in Proxy-Einstellungen in Windows und Chrome.
Kann eine PAC-Datei Benutzernamen und Passwort enthalten?
Nein. Die Funktion gibt nur ein Schlüsselwort, einen Host und einen Port zurück. Bei einem HTTP-Proxy fragt der Browser die Zugangsdaten in einem 407-Dialog ab; für automatisierte Jobs und SOCKS5 nutzen Sie die Authentifizierung per IP-Whitelist.
Was ist der Unterschied zwischen PAC und WPAD?
Die PAC-Datei enthält die Regeln. WPAD findet die Adresse einer PAC-Datei im lokalen Netz über DHCP oder DNS. Sie können eine PAC-Datei ohne WPAD nutzen, indem Sie ihre Adresse selbst eintragen, und das ist auch die sicherere Wahl.
Kann eine PAC-Datei einen SOCKS5-Proxy zurückgeben?
Ja, als SOCKS5 host:port; Chrome und Firefox folgen beide diesem Eintrag. Chrome sendet keine SOCKS5-Zugangsdaten, geben Sie Ihre IP also auf dem Proxy frei.
Ich habe meine PAC-Datei geändert. Warum nutzt der Browser noch die alten Regeln?
Der Browser behält die geladene Version, bis er die Konfiguration neu lädt. Klicken Sie in Firefox auf Neu laden, nutzen Sie Re-apply settings auf chrome://net-internals/#proxy oder starten Sie den Browser neu. Ein neuer Dateiname für jede Version (proxy-v2.pac) räumt jeden Zweifel aus.
Fazit
Eine PAC-Datei macht aus einem Proxy, der nur an oder aus sein kann, eine Entscheidung für jede einzelne Anfrage: FindProxyForURL prüft den Host und gibt DIRECT, PROXY oder SOCKS5 zurück, und der Browser probiert die Einträge von links nach rechts. Werten Sie host aus, meiden Sie Funktionen, die DNS fragen, und lassen Sie die DIRECT-Reserve bei Regeln für Ziele der Datenerfassung weg. Tragen Sie die PAC-Adresse selbst über HTTPS ein und schalten Sie WPAD ab, wo es nicht gebraucht wird. Da die Datei kein Passwort enthalten kann, kombinieren Sie sie mit der Authentifizierung per IP-Whitelist und wählen den Proxy-Typ für jede Regel aus unseren Proxy-Diensten.




