Open
Description
一、简单分析
简单的分析,从输入URL
到回车后发生的行为如下:
- URL解析
- DNS 查询
- TCP 连接
- HTTP 请求
- 响应请求
- 页面渲染
二、详细分析
URL解析
首先判断你输入的是一个合法的URL
还是一个待搜索的关键词,并且根据你输入的内容进行对应操作
URL
的解析第过程中的第一步,一个url
的结构解析如下:
DNS查询
在之前文章中讲过DNS
的查询,这里就不再讲述了
整个查询过程如下图所示:
最终,获取到了域名对应的目标服务器IP
地址
TCP连接
在之前文章中,了解到tcp
是一种面向有连接的传输层协议
在确定目标服务器服务器的IP
地址后,则经历三次握手建立TCP
连接,流程如下:
发送 http 请求
当建立tcp
连接之后,就可以在这基础上进行通信,浏览器发送http
请求到目标服务器
请求的内容包括:
- 请求行
- 请求头
- 请求主体
响应请求
当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP响应消息,包括:
- 状态行
- 响应头
- 响应正文
在服务器响应之后,由于现在http
默认开始长连接keep-alive
,当页面关闭之后,tcp
链接则会经过四次挥手完成断开
注意
为什么数据传输是用对称加密?
公钥加密数据速度太慢,系统消耗大。对称加密算法性能是非对称的1000倍这个数量级,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。
另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。
页面渲染
当浏览器接收到服务器响应的资源后,首先会对资源进行解析:
- 查看响应头的信息,根据不同的指示做对应处理,比如重定向,存储
cookie
,解压gzip
,缓存资源等等 - 查看响应头的
Content-Type
的值,根据不同的资源类型采用不同的解析方式
关于页面的渲染过程如下:
- 解析
HTML
,构建DOM
树 - 解析
CSS
,生成CSS
规则树 - 合并
DOM
树和CSS
规则,生成render
树 - 布局
render
树(Layout / reflow
),负责各元素尺寸、位置的计算 - 绘制
render
树(paint
),绘制页面像素信息 - 浏览器会将各层的信息发送给
GPU
,GPU
会将各层合成( composite ),显示在屏幕上