瀏覽器 DNS緩存與DNS prefetch (DNS預解析)

瀏覽器 DNS緩存

瀏覽器DNS緩存的時間跟DNS服務器返回的TTL值無關。html

注:TTL(Time-To-Live),就是一條域名解析記錄在DNS服務器中的存留時間。chrome

瀏覽器在獲取網站域名的實際IP地址後會對其IP進行緩存,減小網絡請求的損耗。每種瀏覽器都有一個固定的DNS緩存時間,其中Chrome的過時時間是1分鐘,在這個期限內不會從新請求DNS。Chrome瀏覽器看自己的DNS緩存時間比較方便,在地址欄輸入:數據庫

chrome://net-internals/#dns

DNS prefetch

概述

DNS(Domain Name System, 域名系統),是域名和IP地址相互映射的一個分佈式數據庫。DNS 查詢就是將域名轉換成 IP 的過程,這個過程短的話 2ms 幾乎無感,長則可能達到幾秒鐘。瀏覽器


當瀏覽器訪問一個域名的時候,須要解析一次DNS,得到對應域名的ip地址。在解析過程當中,按照瀏覽器緩存、系統緩存、路由器緩存、ISP(運營商)DNS緩存、根域名服務器、頂級域名服務器、主域名服務器的順序,逐步讀取緩存,直到拿到IP地址。緩存


DNS Prefetch,即DNS預解析就是根據瀏覽器定義的規則,提早解析以後可能會用到的域名,使解析結果緩存到系統緩存中,縮短DNS解析時間,來提升網站的訪問速度。安全

使用

現代瀏覽器在 DNS Prefetch 上作了兩項工做:服務器

  • 一、html 源碼下載完成後,會解析頁面的包含連接的標籤,提早查詢對應的域名。
  • 二、對於訪問過的頁面,瀏覽器會記錄一份域名列表,當再次打開時,會在 html 下載的同時去解析 DNS。

DNS預解析分爲如下兩種:網絡


自動解析

瀏覽器使用超連接的href屬性來查找要預解析的主機名。當遇到a標籤,瀏覽器會自動將href中的域名解析爲IP地址,這個解析過程是與用戶瀏覽網頁並行處理的。可是爲了確保安全性,在HTTPS頁面中不會自動解析

手動解析

在頁面添加以下標記:分佈式

<link rel="dns-prefetch" href="//g.alicdn.com" />

上面的link標籤會讓瀏覽器預取"g.alicdn.com"的解析fetch

但願在HTTPS頁面開啓自動解析功能時,添加以下標記:

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

但願在HTTP頁面關閉自動解析功能時,添加以下標記:

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

並不是全部頁面都要手動解析,通常在整個站點的入口頁作這個工做就好了,畢竟一個站點下用到的大多數域名都會在首頁體現。

看下淘寶首頁的DNS解析預解析代碼:

<link rel="dns-prefetch" href="//g.alicdn.com" />
<link rel="dns-prefetch" href="//img.alicdn.com" />
<link rel="dns-prefetch" href="//tce.alicdn.com" />
<link rel="dns-prefetch" href="//gm.mmstat.com" />
<link ref="dns-prefetch" href="//tce.taobao.com" />
<link rel="dns-prefetch" href="//log.mmstat.com" />
<link rel="dns-prefetch" href="//tui.taobao.com" />
<link rel="dns-prefetch" href="//ald.taobao.com" />
<link rel="dns-prefetch" href="//gw.alicdn.com" />
<link rel="dns-prefetch" href="//atanx.alicdn.com"/>
<link rel="dns-prefetch" href="//dfhs.tanx.com"/>
<link rel="dns-prefetch" href="//ecpm.tanx.com" />
<link rel="dns-prefetch" href="//res.mmstat.com" />

做用

DNS Prefetch有效縮短了DNS的解析時間

若是瀏覽器最近將一個域名解析爲IP地址,所屬的操做系統將會緩存,下一次DNS解析時間能夠低至0-1ms。 若是結果不在系統本地緩存,則須要讀取路由器的緩存,則解析時間的最小值大約爲15ms。若是路由器緩存也不存在,則須要讀取ISP(運營商)DNS緩存,通常像taobao.combaidu.com這些常見的域名,讀取ISP(運營商)DNS緩存須要的時間在80-120ms,若是是不常見的域名,平均須要200-300ms。通常的網站在運營商這裏都能查詢的到,因此廣泛來講DNS Prefetch能夠給一個域名的DNS解析過程帶來15-300ms的提高,尤爲是一些大量引用不少其餘域名資源的網站,提高效果就更加明顯了

瀏覽器底層緩存進行了建模,當Chrome瀏覽器啓動的時候,就會自動的快速解析瀏覽器最近一次啓動時記錄的前10個域名。因此常常訪問的網址就沒有DNS解析的延遲,打開速度更快。

相關文章
相關標籤/搜索