Integrare nel proprio stack una lookup IP-paese veloce
Una guida pratica per aggiungere il rilevamento del Paese a un’app web: dove effettuare la chiamata, come gestire la cache e come tenerla fuori dal percorso critico.
# Integrare nel proprio stack una lookup IP-paese veloce
Il rilevamento del Paese dovrebbe aggiungere solo pochi millisecondi a una richiesta. Ecco come fare in modo che resti così.
Prima di tutto, individua correttamente l’IP del client
Dietro un proxy o una CDN, l’indirizzo del socket è quello del tuo edge, non quello dell’utente. Leggi l’header che la tua infrastruttura imposta davvero e consideralo attendibile solo se arriva dalla tua rete:
- Cloudflare:
CF-Connecting-IP - La maggior parte dei load balancer: la prima voce non attendibile da sinistra in
X-Forwarded-For - Connessione diretta: l’indirizzo peer del socket
Fare il parsing di X-Forwarded-For alla cieca apre una falla di spoofing, perché un client può anteporre qualsiasi valore voglia.
Chiamala una volta per sessione, non a ogni richiesta
Esegui la risoluzione quando crei la sessione, salva Paese e classificazione nella sessione o in un cookie firmato, e riutilizzali. Ripeti la lookup quando cambia l’IP. In questo modo, migliaia di richieste diventano una sola interrogazione.
Usa una cache con un TTL sensato
La geolocalizzazione di una determinata /24 tende a restare stabile per ore. Una cache in memoria di un’ora, indicizzata per IP, elimina gran parte del traffico ripetuto. Metti in cache anche i risultati negativi, con un TTL più breve, così un disservizio non si trasforma in una tempesta di lookup.
Non bloccare mai il rendering
Imposta per la lookup un timeout rigido di qualche centinaio di millisecondi e un fallback definito:
ts const geo = await Promise.race([ lookup(ip), timeout(300).then(() => null), ]); const country = geo?.country ?? defaultCountry;
Una pagina renderizzata nella valuta sbagliata è un piccolo fastidio. Una pagina che non viene renderizzata è fatturato perso.
Fallo all’edge quando puoi
Se la tua applicazione gira su un runtime edge, la lookup avviene geograficamente vicino all’utente e la latenza aggiunta diventa trascurabile. Risolvi lì, allega il risultato al contesto della richiesta e lascia che l’applicazione lo legga come un dato già pronto.
Conserva la decisione, non il dato grezzo
Memorizza l’esito che interessa al business, per esempio la valuta mostrata o la regola applicata, invece del record di localizzazione completo. Costa meno, è più semplice da spiegare a chi si occupa di privacy e, nella pratica, è ciò che andrai davvero a interrogare in seguito.
