从 URL 输入到页面展现发生了什么
当在浏览器地址栏输入网址,如:<a>http://www.baidu.com</a>后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为:
1.在浏览器输入URL
2.域名解析
3.服务器处理
4.网站处理
5.浏览器处理,绘制网页
1.在浏览器输入URL
用户输入url,例如<a>http://[www.baidu.com</a>。其中http为协议,www.baidu.com为网络地址,及指出需要的资源在那台计算机上。一般网络地址可以为域名或IP地址,此处为域名。使用域名是为了方便记忆,但是为了让计算机理解这个地址还需要把它解析为IP地址。
HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
2.域名解析
客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。
域名解析流程:
1.浏览器缓存 – 浏览器会缓存DNS记录一段时间
2.系统缓存 - 从 Hosts 文件查找是否有该域名和对应 IP。
3.路由器缓存 – 一般路由器也会缓存域名信息。
4.ISP DNS 缓存 – 比如到电信的 DNS 上查找缓存。
5.如果都没有找到,则向根域名服务器查找域名对应 IP,根域名服务器把请求转发到下一级,知道找到 IP
3.web服务器处理
服务器是一台安装系统的机器,常见的系统如Linux、windows server 2012系统里安装的处理请求的应用叫 Web server常见的 web服务器有 Apache、Nginx、IIS、Lighttpd。
服务接收到客户端发送的请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,其中比较常见的是200 OK表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。404 not found 表示客户端请求的资源找不到。
4.网站处理流程
MVC 模型(model)-视图(view)-控制器(controller)
流程:用户请求页面-->Rails路由-->控制器-->数据库-->模型-->视图-->控制器-->用户。
请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。
5.浏览器处理,绘制网页
现代浏览器渲染页面的过程是这样的:HTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。
DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而形成。渲染树只包含需要显示在页面中的DOM元素,像<head>元素或display属性值为none的元素都不在渲染树中。
在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送HTTP请求重复上述的步骤。在收到CSS文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。