剖析网页从浏览器输入地址到加载完毕的全过程——域名解析

作为一名WEB开发者,你了解页面的加载的全过程吗?至少在我身边,我统计了一下,有百分之七十的人不能完整地说出来。(前端的要求高一点,还包括了页面渲染的过程)

所以今天在这里想留下这篇文章记录一下这个重要的知识点。


一个页面完整的加载过程大致如下:

1. 输入网址 2. 域名解析 3. 客户端和服务器建立连接并传输数据 4.浏览器渲染页面


是不是很简单咧?其实一点都不简单。为了不漏掉任何一步,我在写这篇文章前可是把各个步骤都复习了一遍。所以我深知,其实整个过程挺复杂。


第一步:输入网址

这一步应该不用我解释了,地球人都会。


第二步:域名解析

这是个坑。待我详细说来:

首先,客户端会先查询浏览器缓存(一般浏览器都会对访问过的站点进行DNS缓存,具体缓存的有效时间不详,有兴趣的孩纸可以去研究一下,不过估计时间应该不长)。

如果浏览器缓存不存在,再去查询客户端的系统缓存。

如果系统缓存也不存在,再去匹配hosts文件中是否存在相关DNS规则。

如果hosts中也找不到。妈蛋,就要请求本地的DNS服务器了。

本地的DNS服务器地址哪里来?不用担心,这个一般是自动获取的。这个自动获取的方式其实是有讲究的。目前最广泛的就是通过DHCP协议获取。但是肯定还有其它的方式,这个我还没有深入研究,待我心血来潮再专门写篇文章说明一下吧。

接着说。刚刚说到本地DNS服务器,这里有多个知识点:1. DNS使用的是TCP还是UDP协议? 2. 本地的DNS服务器怎么就知道域名对应的IP地址呢? 3. 针对DNS的性能优化?

第一个问题我博客里有相关文章。第二个问题我解释一下(通俗地讲):

本地DNS服务器的存在为的就是分流。全球有13台根域服务器,而不同的顶级域名有对应的不同的DNS服务器(如.com,.net等)。而这些DNS服务器显然不能应对全球无数的计算机的请求。所以很多时候,域名的解析请求是由区域性的DNS服务器代为发送。这样本地的DNS服务器就可以缓存一个副本到本地,而当这个区域的客户端请求到这个副本中的域名时,本地DNS服务器就不需要再次去“麻烦”老大了。更为详细的查询过程其实是:

本地DNS -> 根域DNS服务器 -> 下一级DNS服务器 -> 再下一级直至查询到对应域名的IP地址为止。

这个过程叫DNS迭代查询。而如果本地DNS服务器存在相关缓存不需要再请求根域,就叫DNS递归查询。

更为详细的过程大家可以自行谷歌。

对于第三个问题,是我最想讲的问题。性能优化一直是WEB开发关注的焦点。但是其实很长一段时间大家对DNS的性能优化关注度并不高。所以在这里我想整理一下自己对DNS优化的见解:

其实每个网站都逃不过DNS解析。所以不要想着躲避,而是想着去减少。

1. 控制外部资源的数量。引用外部资源不可避免的就是要进行DNS解析。如果数量过大,那么叠加起来的DNS解析开销是不可忽视的。

2. 如果避免不了第一次访问,就想着去避免第二次。前端的童鞋可能知道link有个类型是dns-prefetch,就是提前对页面中的域名进行解析。这样用户通过本页面跳转的其它页面的DNS解析就会被提前完成。提升了用户体验(其实我觉得有点自欺欺人^_^)。这个优化建议只针对站内链接。

3. TTL值适当地延长。TTL值是指DNS缓存过期的时间。一般来说一条DNS的记录在本地DNS的缓存时间只有短短的几分钟。而如果对于长期不变的站点来说。这个缓存时间其实可以延长的。当然如果是使用CDN的话这一条性能优化就没必要了。

如果还有别的优化建议,欢迎各位在评论中留言^_^

域名解析这一步差不多就是那么多,有点杂,但是很重要。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值