DNS 全称 Domain Name System 域名解析系统
浏览器 <=========> DNS缓存 + DNS服务器
DNS解析过程文字性解读:
1. 在浏览器地址栏输入URL后回车,首先识别URL中协议,域名,文件路径,端口等信息。
2. 查找本地hosts文件,如果有这个网址映射关系,则完成解析
3. 询问本地DNS解析器缓存,有则完成解析
4. 查找TCP/IP参数中设置的首选DNS服务器,称之为本地DNS服务器。此服务器收到查询时,如果在在其本地配置区域资源中找到要查询的域名,则完成解析,此解析具有权威性
5. 如果要查询的域名不在本地DNS服务器本地配置资源中,但其缓存了该映射关系,则也完成解析,但此解析不具有权威性
6. 如果以上方法都失效,由本地服务器进行迭代查询,先向根域名DNS服务器发出请求,再查二级域,三级域,直到查询到要解析的地址或名字为止,本地DNS服务器收到应答后,先在缓存中存储,然后将解析结果返回客户机。
7. 没有找到则返回错误。
小故事总结:
- 当你(浏览器)来西安旅游不知道大雁塔怎么走,需要问路,张大爷会拿着西安地图(DNS服务器)查一下,(DNS查询)告诉你坐地铁4号线可以直达.
- 几天当你的同学(浏览器)也来西安旅游再问大雁塔怎么走,张大爷会自然告诉你同学,坐4号线就可以.(这个时候张大爷脑海里就会有DNS缓存).
- 再过一个月你再来西安旅游,再问张大爷的时候,他就又需要从服务器查询(DNS缓存时间过期)
前端开发在DNS上的优化
DNS Prefetch 是一种DNS 预解析技术,当你浏览网页时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的连接时就无需进行DNS 的解析,减少用户等待时间,提高用户体验。
我们DNS 解析的时候,需要用域名去DNS 解析匹配 IP ,这个是需要时间的,如果加了 dns-perfetch 呢,浏览器会记住(缓存)这个解析,直接就请求过去了,不需要再走DNS 解析。
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//www.zhix.net">
<link rel="dns-prefetch" href="//api.share.zhix.net">
<link rel="dns-prefetch" href="//bdimg.share.zhix.net">