Schnelle IP-zu-Land-Erkennung im eigenen Stack
Ein praxisnaher Leitfaden für die Ländererkennung in Webanwendungen: wo der API-Aufruf hingehört, wie Caching sinnvoll funktioniert und warum der kritische Pfad tabu sein sollte.
# Schnelle IP-zu-Land-Erkennung im eigenen Stack
Eine Ländererkennung sollte eine Anfrage höchstens um wenige Millisekunden verlängern. So bleibt es dabei.
Zuerst die Client-IP sauber ermitteln
Hinter einem proxy oder CDN zeigt die Socket-Adresse in der Regel nur auf die eigene Edge-Infrastruktur. Lesen Sie deshalb den Header aus, den Ihre Umgebung tatsächlich setzt – und vertrauen Sie ihm nur innerhalb Ihres eigenen Netzwerks:
- Cloudflare:
CF-Connecting-IP - Die meisten Load Balancer: der erste nicht vertrauenswürdige Eintrag von links in
X-Forwarded-For - Direkte Verbindung: die Socket-Peer-Adresse
X-Forwarded-For ungeprüft zu parsen, ist eine Einladung zum Spoofing. Ein Client kann diesem Header beliebige Werte voranstellen.
Einmal pro Session auflösen, nicht bei jedem Request
Führen Sie die Auflösung beim Anlegen der Session durch, speichern Sie Land und Klassifizierung in der Session oder in einem signierten Cookie und verwenden Sie die Information anschließend wieder. Erst wenn sich die IP ändert, wird neu aufgelöst. Aus tausenden Lookups wird so ein einziger.
Mit vernünftiger TTL cachen
Die Geolocation eines bestimmten /24-Netzes bleibt meist über Stunden stabil. Ein In-Memory-Cache mit einer Stunde TTL und der IP als Schlüssel fängt den Großteil wiederkehrender Anfragen ab. Cachen Sie auch negative Ergebnisse, allerdings mit kürzerer TTL. So wird aus einer Störung kein Lookup-Sturm.
Rendering niemals davon abhängig machen
Setzen Sie für den Lookup ein hartes Timeout von wenigen hundert Millisekunden und definieren Sie einen sauberen Fallback:
ts const geo = await Promise.race([ lookup(ip), timeout(300).then(() => null), ]); const country = geo?.country ?? defaultCountry;
Eine Seite, die kurz die falsche Währung anzeigt, ist ärgerlich. Eine Seite, die gar nicht rendert, kostet Umsatz.
Wenn möglich an der Edge erledigen
Läuft Ihre Anwendung in einer Edge-Runtime, findet der Lookup geografisch nah am Nutzer statt; die zusätzliche Latenz fällt kaum ins Gewicht. Lösen Sie die IP dort auf, hängen Sie das Ergebnis an den Request-Kontext und lassen Sie die Anwendung es wie normale Daten auslesen.
Die Entscheidung behalten, die Rohdaten verwerfen
Speichern Sie das Ergebnis, das für Ihr Geschäft relevant ist – etwa die angezeigte Währung oder die angewendete Regel – statt des vollständigen Standortdatensatzes. Das ist günstiger, gegenüber Datenschutzprüfern leichter zu erklären und genau das, wonach Sie später tatsächlich suchen werden.
