DNS prefetching: una pessima idea

Mucca / Cowbrowser moderni hanno una funzione apparentemente utile, ma che provoca un notevole e inutile incremento di traffico DNS.

Una piccola spiegazione a grandi linee su cime funziona la risoluzione dei nomi, una delle tecnologie che stanno alla base del funzionamento di Internet per l’utente finale.

Ogni macchina (host) collegata a Internet ha un indirizzo IP che è necessariamente univoco (tralasciamo i NAT delle reti private che non ci interessano in questo contesto). L’indirizzo IP è, per ora, formato da una quaterna di numeri decimali da 0 a 255 separati da punti, tipo 1.2.3.4

Per rendere più facile la memorizzazione dei siti, esiste un sistema che assegna ad ogni indirizzo (ad esempio 209.62.58.154) uno più nomi a dominio (ad esempio siamogeek.com). Questo accoppiamento è gestito dal DNS.

Quando un programma chiede la risoluzione di un nome, ovvero l’indirizzo IP che corrisponde a quel nome, il DNS se lo procura e lo tiene da parte nella sua cache nel caso in cui il programma dovesse chiederlo di nuovo. Se si dovesse verificare questo caso, non verrebbe più fatta una richiesta, ma verrebbe uutilizzata l’informazione in cache.

La durata di questa cache è stabilita dal valore del TTL (time to live) associato a ciascuna informazione rilasciata dal DNS. Il TTL è il motivo per cui il vostro provider vi dice che una modifica al DNS si deve propagare su Internet. In realtà, la durata della propagazione non è altro che il  tempo necessario affinché scadano tutte le informazioni registrate nelle cache dei DNS.

Siccome, per motivi tecnici, la risoluzione di un nome potrebbe richiedere anche uno o due secondi, qualcuno ha avuto la (presunta) bella idea di introdurre il DNS prefetching nei browser.

Immaginate una pagina visualizzata da vostro browser: la pagina contiene, ovviamente, dei link. Normalmente, quando clickate su un link il browser risolve il nome associato all’URL in quel momento e contatta il server remoto per recuperare la pagina da visualizzare.

Se è attiva la funzione di DNS prefetching, quando il browser visualizza una pagina, tenta di risolvere tutti i nomi a dominio citati in tutti gli URL di quella pagina, anche se non verranno mai utilizzati dall’utente.

È ovvio che una feature di questo tipo sovraccarica inutilmente sia il DNS server utilizzato dal browser, sia i DNS server autoritativi dei vari nomi a dominio, che devono soddisfare un sacco di richieste, che, però, non verranno mai utilizzate.

Gli sviluppatori possono bloccare questa feature delirante includendo questo nella sezione HEAD delle pagine HTML:

<meta http-equiv="x-dns-prefetch-control" content="off">

(via Pinkbike)

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

5 pensieri riguardo “DNS prefetching: una pessima idea”

  1. Io credo che tale funzione sia utile.
    Se nel mio sito web utilizzo i google fonts quindi andando a caricare i dati da fonts.googleapis.com ad ogni pagina credo che convenga mettere i prefetch il sito fonts.googleapis.
    Idem per esempio analytics.
    Quindi anziché usare il prefetch per ogni link credo sia meglio abilitarlo su pochi ma essenziali siti.
    Non tutti i mali vengon per nuocere.

    1. DLion, quello che dici tu non c’entra nulla.
      Se la tua pagina usa fonts.googleapis.com, dovra` comunque collegarcisi indipendentemente dal fatto che un browser usi il DNS prefetching o meno(*).

      Quindi questa supposta “feature” non ti migliora nulla e non ti peggiora nulla da quel punto di vista. Il problema e` quando uno in una pagina ha tanti link verso host diversi.

      Luigi, comunque ci sono anche ottimi usi per il DNS Prefetching. Ad esempio se vuoi fare un DDoS su un server DNS 🙂

      (*) A voler essere precisi, si puo` ricordare che ovviamente nel caso in cui i dati da prendere fonts.googleapis.com siano gia` in cache, un client col DNS prefetching trovera` anche il DNS record nella sua cache, ed in quel caso non fara` nulla indipendentemente dal DNS prefetching.

Spazio per un commento