当我们在浏览器地址栏输入www.baidu.com敲下回车键之后到浏览器显示出百度首页,这中间到底发生了什么呢?现在我从网站表层的角度给大家分析一下。首先大家要先了解一下URL的组成,请看这里。
域名解析
当我们敲下回车之后,浏览器会解析url的域名部分,为了加快速度,浏览器会按以下几个步骤进行解析:
浏览器缓存 – 浏览器会缓存DNS记录一段时间
系统缓存 - 从 Hosts 文件查找是否有该域名和对应 IP。
路由器缓存 – 一般路由器也会缓存域名信息。
ISP DNS 缓存 – 比如到电信的 DNS 上查找缓存。
如果都没有找到,则向根域名服务器查找域名对应 IP,根域名服务器把请求转发到下一级,直到找到 IP
服务器处理
得到IP地址之后,浏览器会访问到该IP下的服务器并且发出请求。此时服务器上的web server会根据写好的配置文件将请求分配给不同的程序,随后程序会返回结果,通过web server响应给浏览器。(这里的程序其实指的就是我们编写的后台程序,大多数都采用MVC三层架构模式进行设计和实现。有关MVC的知识在这里就不再赘述,请大家自行百度。)
浏览器处理
最后一步是浏览器对服务器返回的HTML文件进行加载、解析和渲染。
浏览器对html的加载顺序是自上而下的,但是遇到link标签、script标签和img标签时会再次向服务器发出请求或缺css文件、js文件和图片资源。
解析的过程,其实就是生成解析树,即dom树。dom树是由dom元素及属性节点组成,加上css解析的样式对象和js解析后的动作实现。
而渲染,就是将DOM树进行可视化表示。浏览器通过上面步骤计算得到渲染树,是DOM树的可视化表示,构建渲染树使页面以正确的顺序绘制出来,遵循一定的渲染规则,经过一系列的渲染工作,实现网站页面的绘制,由此最终完成了页面展示。