1. 在浏览器输入URL回车之后发生了什么
我们在浏览器输入的URL实际上不能找到服务器地址
1.1 解析ip地址
每个网址都有相应的ip地址,ip地址是由数字组成的,不方便人们记忆。所以这里需要DNS解析,DNS解析就是把网址解析为ip地址。其实DNS就是一个数据库,里面记录了URL和对应的ip地址,这样我们就能根据URL找到对应的ip地址,有了ip地址就可以在互联网找到对应的服务器。
1.2 建立数据通道
在正式发送数据之前需要建立TCP连接,建立TCP连接就是在发送数据之前建立通道。客户端和服务端之间建立通道就可以在这个通道里发送数据了。大家都在这个通道之间发送数据,这样就不容易发生错乱了。于是就有了建立通道前的三次握手。客户端发送SYN数据包来表示请求连接,服务器响应SYN和ACK的数据包来表示同意建立连接,客户端再发送ACK数据包表示成功连接。
1.3 发送请求报文
当我们和服务器建立连接之后,浏览器建立HTTP请求报文给服务器。
- 请求行:请求方式,请求地址,HTTP协议版本组成
- 请求头:关于浏览器的信息,有键值对组成,一行一对
- 空行
- 请求数据
当服务器收到HTTP请求报文之后,处理请求报文并作出响应。
- 状态行:Status Code 200
- 响应头部:content-type:text/html;chartset=utf-8。键值对组成,一行一对
- 空行
- 响应数据
1.4 开始渲染页面
浏览器在接受服务器的响应之后,就开始渲染页面了,也就是解析接收到的html、css、js等文件
2. 浏览器渲染页面的流程
请求服务器得到html文件。一开始浏览器得到的是显示字节内容的html文件;字节转换为字符,也就是html代码;浏览器把字符转换为token,可以把token理解为符号标签;把token转变为节点对象;最后把节点对象连接在一起,形成文本对象模型,也就是DOM。
CSSOM同理
渲染树上的节点是页面能够呈现的内容。一些html标签和一些样式是不会被呈现出来的,没有呈现出来的就不会挂载DOM树上了。比如meta、link标签,display: none的样式。渲染树的任务就是匹配DOM和CSSOM的节点,并且捕获可见内容。
渲染树构建完成之后,页面也不能马上被渲染,还需要布局:获取渲染树的结构,节点位置和大小。
布局完成之后就开始安排页面的绘制了。把渲染树以像素的形式绘制在页面,此时页面就呈现出来了。
DOM和CSSOM不同点:DOM可以部分解析,CSSOM不能部分解析。例:只解析body会出现问题。
在解析CSS文件并构建CSSOM的时候,浏览器依旧可以下载并解析JS文件。等CSSOM构建完成以后就可以执行JS里的内容了。JS会阻塞HTML解析的。因为JS既可以操作DOM,又可以操作CSSOM。如果不等JS下载解析执行完以后在构建DOM,这样会导致网页的内容出现了又消失。
总结: