从输入URL到页面加载发生了什么

总体来说可以分为以下几个过程:

1.DNS解析;

2.TCP连接;

3.发送HTTP请求;

4.服务器处理请求并返回HTTP报文;

5.浏览器解析渲染页面;

6.连接结束;

具体过程分析:

DNS解析

DNS解析的过程就是寻找哪台机器上有你需要资源的过程,实现了由网址都ip地址的转换。互联网上每一台计算机都有唯一的标识:ip地址,但是ip地址记忆并不方便,用户更喜欢去根据网址来寻找,所以DNS可以来进行转换。

TCP连接

http协议是使用TCP作为传输层协议的,当TCP出现瓶颈时,HTTP也会受到影响;使用三次握手建立连接。

TCP三次握手过程如下所示:

1.客户端发送SYN(seq=x)报文给服务器端,进入SYN_SEND状态;

2.服务器端接受到SYN报文,回应一个SYN(seq=y)ACK(ACK=X+1)报文,进入SYN-RECV状态。

3.客户端收到服务器端的SYN报文,回应一个ACK(ACK=Y+1)报文;

三次握手完成,TCP客户端和服务器端成功建立连接。

HTTP请求

主要发生在客户端,发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口,HTTP请求报文由三部分组成:请求行、请求报头和请求正文。

服务器处理请求并返回HTTP报文

后端从在固定的端口接受到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用,http响应报文也有三个部分组成:状态码、响应报头、响应报文。

状态码:

状态码由三位数字组成,第一个数字定义了响应的类别,具有五种可能取值:

1xx:指示信息--表示请求已接受,继续处理;

2xx:成功--表示请求已被成功接收、理解接受;

3xx:重定向--要完成请求必须要进行进一步操作;

4xx:客户端错误--请求有语法错误或请求无法实现;

5xx:服务器端错误--服务器端未能实现合法的请求。

浏览器解析渲染页面

浏览器在收到HTML\CSS\JS文件后,首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制在屏幕上。这个过程设计到reflow(回流)和repain(重绘);

回流:DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器计算其位置和大小等,这个过程称为回流;

重绘:当盒模型的位置、大小以及其它属性,如颜色、字体、等确定下来后,浏览器便开始绘制内容,这个过程称为重绘;

页面在首次加载时必然会经历回流和重绘。

js解析是由浏览器中js解析引擎完成的,js是单线程运行,也就是说一个时间只能做一件事,所有的任务需要排队;js的执行机制可以看成是一个主线程加上一个任务队列。同步任务就是放在主线程上的任务,异步任务就是放在队列中的任务。

posted @ 2018-09-04 19:43  梁颖666  阅读(139)  评论(0编辑  收藏  举报