地址栏输入 URL 敲下回车后,发生了什么
一、简单分析
1、简单的分析,从输入 URL
到回车后发生的行为如下:
- (1)
URL解析
- (2)
DNS 查询
- (3)
TCP 连接
- (4)
HTTP 请求
- (5)
响应请求
- (6)
页面渲染
二、详细分析
1、URL解析
(1)首先判断你输入的是一个合法的 url
还是一个待搜索的关键词,并且根据你输入的内容进行对应操作
(2)url
的解析第过程中的第一步,一个url
的结构解析如下:
2、DNS查询
(1)在之前文章中讲过DNS
的查询,这里就不再讲述了
(2)整个查询过程如下图所示:
(3)最终,获取到了域名对应的目标服务器IP
地址
3、TCP连接
(1)在之前文章中,了解到tcp
是一种面向有连接的传输层协议
(2)在确定目标服务器服务器的IP
地址后,则经历三次握手建立TCP
连接,流程如下:
4、发送 http 请求
(1)当建立tcp
连接之后,就可以在这基础上进行通信,浏览器发送 http
请求到目标服务器
(2)请求的内容包括:
- (1)请求行
- (2)请求头
- (3)请求主体
5、响应请求
(1)当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP
响应消息,包括:
- (1)状态行
- (2)响应头
- (3)响应正文
(2)在服务器响应之后,由于现在http
默认开始长连接keep-alive
,当页面关闭之后,tcp
链接则会经过四次挥手完成断开
6、页面渲染
(1)当浏览器接收到服务器响应的资源后,首先会对资源进行解析:
- (1)
查看响应头的信息
,根据不同的指示做对应处理,比如重定向,存储cookie,解压gzip,缓存资源等等- (2)
查看响应头
的Content-Type
的值,根据不同的资源类型采用不同的解析方式
(2)关于页面的渲染过程如下:
- (1)解析HTML,构建 DOM 树
- (2)解析 CSS ,生成 CSS 规则树
- (3)合并 DOM 树和 CSS 规则,生成 render 树
- (4)布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
- (5)绘制 render 树( paint ),绘制页面像素信息
- (6)浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite ),显示在屏幕上
参考文献
- (1)https://github.com/febobo/web-interview/issues/141
- (2)https://zhuanlan.zhihu.com/p/80551769