在浏览器地址栏输入网址,如:http://cn.bing.com,浏览器如何呈现最终页面?这个过程大致可以分为两部分:网络通信和页面渲染。1.网络通信Internet中各种网络设备之间的通信遵循TCP/IP协议。当使用TCP/IP协议族进行网络通信时,会通过层次化的顺序与对方进行通信。层次从高到低依次为:应用层、传输层、网络层、数据链路层。发送端从应用层向下,接收端从数据链路层网络向下。如图:在浏览器中输入url,用户输入url,如http://cn.bing.com。其中http为协议,cn.bing.com为网络地址,表示需要的资源在该台电脑上。网络地址一般可以是域名,也可以是IP地址,这里是域名。域名是用来方便记忆的,但是为了让计算机能够理解这个地址,需要解析成IP地址。2、应用层DNS解析域名。客户端首先检查本地是否有对应的IP地址,如果找到则返回对应的IP地址。如果没有找到,则请求上级DNS服务器,直到找到或到达根节点。3、应用层客户端发送HTTP请求。HTTP请求包括两部分:请求头和请求体。请求头中包含了至关重要的信息,包括请求方式(GET/POST)、目标url、要遵循的协议(http/https/ftp...)、返回信息是否需要缓存、客户端是否发送cookies等4.传输层TCP传输消息传输层的TCP协议为传输消息提供可靠的字节流服务。为了方便传输,它把大块的数据以报文段为单位分成数据包进行管理,并进行编号,以便服务器在接收时能够准确还原报文信息。TCP协议通过“三次握手”等方式保证传输的安全性和可靠性。“三次握手”的过程是发送端先向接收端发送一个带有SYN(同步)标志的数据包,并在一定的延迟时间内等待收到的回复。接收端收到数据包后,发回一个带有SYN/ACK标志的数据包,表示确认信息。接收方收到后,向接收方发送一个带ACK标志的数据包,表示握手成功。在此过程中,如果发送方在指定的延迟时间内没有收到回复,则默认接收方不接收请求并再次发送,直到收到回复。5、网络层IP协议查询MAC地址。IP协议的作用是将经过TCP划分的各种数据包传送给接收方。为保证确实能传送到接收方,需要接收方的MAC地址,即物理地址。IP地址和MAC地址是一一对应的。网络设备的IP地址可以改变,但MAC地址一般是固定的。ARP协议可以将一个IP地址解析为对应的MAC地址。当通信双方不在同一局域网时,需要多次中转才能到达最终目的地。在中转过程中,需要通过下一个中转站的MAC地址寻找下一个中转目标。6.数据到达数据链路层。找到对方的MAC地址后,将数据送到数据链路层进行传输。此时客户端发送请求的阶段结束7.服务器接收数据接收端的服务器在链路层接收数据包,然后上行到应用层。这个过程包括在传输层通过TCP协议从分段的数据包中重建原始的HTTP请求消息。8.服务端响应请求服务端收到客户端发送的HTTP请求后,查找客户端请求的资源并返回响应消息,其中包含一个重要的信息——状态码。状态码由三位数字组成,比较常见的是200OK,表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应消息也会附带一个重定向的url。客户端收到后,会相应的更改http请求的url,重新发送。404notfound表示找不到客户端请求的资源。9、服务器返回相应的文件请求成功后,服务器会返回相应的HTML文件。接下来是页面的渲染阶段。10、关闭TCP连接为了避免服务器端和客户端的资源占用和丢失,当双方没有请求或响应传输时,任何一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接需要4次握手。2.页面渲染现代浏览器渲染页面的过程是这样的:解析HTML构建DOM树->构建渲染树->布局渲染树->绘制渲染树。DOM树由HTML文件中的标签排列组成,渲染树是通过在DOM树中添加CSS或HTML中的style样式形成的。渲染树只包含需要在页面上显示的DOM元素。
元素或display属性值为none的元素不在呈现树中。在浏览器接收到完整的HTML文件之前,它开始渲染页面。当遇到外部链接的script标签或style标签或图片时,它会再次发送HTTP请求,重复上述步骤。接收到CSS文件后,会重新渲染已经渲染过的页面,添加合适的样式,图片文件加载后会立即显示在相应位置。此过程可能会触发页面的重绘或回流。