浏览器首次对网站域名DNS解析流程为:
浏览器缓存——操作系统缓存——路由器缓存——ISP DNS缓存——递归缓存
1. 前端优化:DNS预解析提升页面速度
Chrome,Firefox 3.5内置了DNS Prefetching技术
预解析实现:
// 用meta信息来告知浏览器, 当前页面要做DNS预解析
<meta http-equiv="x-dns-prefetch-control" content="on" />
// 在页面header中使用link标签来强制对DNS预解析
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />
注意:dns-prefetch 需慎用,多页面重复DNS预解析会增加重复DNS查询次数。
2.用户在浏览器输入url地址,会发生哪些事情
- 浏览器查找域名的IP地址
- 查找到IP地址,浏览器给服务器发送http请求
- 服务器接收并处理请求
- 服务器返回一个html响应
- 浏览器接收并渲染html
3. 浏览器如何查找域名的ip地址
- DNS域名解析过程
-
- 查找浏览器缓存
浏览器首先会检查缓存是否有此域名对应的解析过的IP地址;若缓存中有则这个解析过程就结束;浏览器缓存域名有大小和时间限制
-
- 查找系统缓存
若浏览器缓存没有,浏览器会去查找操作系统缓存;操作系统也有一个域名解析过程,在Windows中通过C:\Windows\System32\drivers\etc\hosts文件来设置,可以将任何域名解析到任何能够访问的IP地址。
-
- 查找路由器缓存
如果系统缓存找不到,那么查询请求就会发向路由器,一般有自己的DNS缓存
-
- ISP DNS缓存
在网络配置中有DNS服务器地址选项,操作系统把域名发送给这里设置的DNS,即本地域名服务器。这个专门的域名解析服务器性能一般很好,缓存时间受域名的失效时间控制
比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
-
- 递归搜索
1)本地DNS服务器将请求发送给互联网的根域
2)根域将所要查找的域名中的顶级域的服务器IP返回给本地DNS
3)本地DNS根据返回的ip,再向顶级域(com域)发送请求
4)com域中的服务器再向域名中的二级域(baidu)的ip地址返回本地DNS
5)本地DNS再向二级域发送请求进行查询
……)重复