引言
“从输入URL,到页面显示,这中间都发生了什么?”,常刷知乎的肯定都知道这在知乎上是一道经典题,把自己能理解的部分做个记录:
过程简述
- 浏览器通过域名查找对应IP;
- 浏览器通过IP地址与服务器建立链接;
- 浏览器与服务器通信:浏览器发送请求,服务器处理请求;
- 浏览器与服务器断开链接;
- 页面渲染;
下面就针对以上5条进行简单介绍
1.浏览器通过域名查找对应IP:
URL的基本结构: 协议名称 :// 服务器所在域名或者IP地址 : 端口号 / 所要访问的文件路径
PS:浏览器为了保证安全性,设定了跨域保护策略, 即窗口之间的通信必须满足使用相同协议, 相同域名, 相同端口,因此深入理解URL各组成部分的含义有助于我们判断两个窗口之间是否能互相通信。
以http://www.baidu.com/index.html为例,
http
表示超文本传输协议
www.baidu.com
是域名,由于IP协议规定的纯数字难以记忆,所以就用域名来代替便于记忆理解,百度实际的IP地址为119.75.217.109。就像每个人都有身份证号,身份证号是唯一的,但我们不能听过身份证号来跟别人交流,所以就叫别人的名字。在这里,身份证号就是IP,域名就是人的姓名。
DNS
服务器之间的访问定位还是通过IP来定位的,但是我们输入的是域名,那么就产生了DNS协议,它的作用就是把域名转化为IP,提供该协议服务的服务器就叫DNS服务器。
index.html
就是我们所要访问的文件名
2.浏览器通过IP地址与服务器建立链接;
解析出了服务器的IP地址,浏览器就与服务器建立连接了。连接过程就是俗称的TCP协议“三次握手”:
1.主机向服务器发送一个建立连接的请求(您好,我想认识您);
2.服务器接到请求后发送同意连接的信号(好的,很高兴认识您);
3.主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器两者建立了连接。
3.浏览器与服务器通信
建立连接后,主机与服务器就开始进行通信。
1.浏览器根据URL生成HTTP请求,请求中包含请求头和请求体。
2.服务器接收到请求后,根据请求的内容,将相对应的文件发送给浏览器。
4.浏览器与服务器断开链接
发送完毕后,主机与浏览器断开连接,断开连接过程是一个“四次挥手”的过程,当服务器接收到断开连接的请求时,可能仍然有数据未发送完毕,所以服务器先发送确认信号,等数据全部发送完毕再同意断开。
5.页面渲染
1.浏览器开始解析HTML文件,按照从上到下的顺序解析。
2.HTML解析器将HTML转成成DOM,构建完DOM树后,触发DomContentLoaded事件。
3.CSS解析器将CSS解析为CSSOM(层叠样式表对象模式)
4.CSSOM和DOM开始合并渲染布局,计算各个节点的位置信息;
5.布局后的渲染树显示到界面上;
以上只是自己对整个过程的简单理解,往深了讲,这个题涵盖的知识面太多太广太深。