DNS解析
- 当浏览器接收到一个地址后,需要到对应的主机上去查询对应的地址的资源,那就需要知道这台主机在哪里,而主机的定位依靠的是IP,这个过程便是在寻找IP。浏览器首先会询问DNS服务器,拿到对应的IP地址。
TCP(Transmission Control Protocol)握手
-
浏览器知道了地址的IP地址后,会尝试和主机建立连接,怎么建立连接呢?尝试通过三次TCP握手。
TCP握手是一个协议,一种机制,一种通信标准,旨在让两个主机实体之间商量好连接参数
-
我认为TCP可以类比为跟美女要微信,然后通过微信聊天(建立连接)
你搭讪美女:HI,可以给我你的微信吗?(客户端问主机:可以建立连接吗?)
美女回答:可以的,扫我扫你?(主机回复:可以的,你也要为我打开一个链接可以吗?)
你打开二维码:扫我!(客户端回复:可以的,链接给你)
如此,你和美女成功建立微信通信(客户端和服务器建立连接)
对于HTTPS协议,还有额外的一次握手,TLS
TLS握手请参考,图文并茂:浏览器工作原理
客户端发起请求
客户端向一个完整的URL发起请求,包含请求方法(GET、POST、PUT……),请求头(http Header),请求体
服务器响应
主机服务器接收到请求后,对请求进行处理,返回一个Http Response,包含状态码(200/404/500……),响应头(cookie、过期时间、编码格式……),响应体
浏览器解析
客户端浏览器拿到Http请求的响应体之后,需要呈现出来,第一步便是解析,这个过程将由浏览器引擎完成,假如收到的是一个完整的HTML文档,会解析出其中的HTML部分CSS部分和JS部分程可以分为以下几个步骤
- 语法分析,将JavaScript部分交给JavaScript引擎执行(EventLoop)
- 语法分析,将HTML部分构建成一个Dom树
- 语法分析,将CSS部分解析构建成一个CSSOM树
- 将DOM树和CSSOM树组合成一个叫做渲染树的东西,浏览器最终就是根据这棵渲染树(Render Tree)进行渲染,渲染阶段又可以如下细分
- 布局(回流)阶段:计算节点的尺寸、位置,这个阶段可能会因为一些样式的改变(height、position……)而反复执行
- 绘画(重绘)阶段:位置和大小确定了,进行着色、透明度、阴影等处理
这里附一张浏览器的帧处理流程图