网上搜了很多文章,大致的自己总结下。
为了方便理解,可以这么想:当你在浏览器输入 www.baidu.com 时发生了什么 ?
如果从网上搜,一般都会给你个简单的步骤
1.DNS 解析:将域名解析成 IP 地址
2.TCP 连接:TCP 三次握手
3.发送 HTTP 请求
4.服务器处理请求并返回 HTTP 报文
5.浏览器解析渲染页面
6.断开连接:TCP 四次挥手
什么是DNS?什么是域名? 什么是IP地址?
DNS是域名系统 Domain Name System 互联网的一项服务。干什么的,用来将域名和IP地址相互映射的分布式数据库。
域名是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。域名可以说是一个IP地址的代称。
IP地址是当设备连接网络,设备将被分配一个IP地址,用作标识。通过IP地址,设备间可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,无法知道哪个是接收方
——来自WIKI
啥意思?
这里www.baidu.com就是域名,当你输入后按下回车,那么浏览器会自动去寻找对应的IP地址。而DNS就像打电话的Siri,可以直接用称呼baidu.com呼叫来代替电话号码(IP地址),DNS在我们直接调用网站名后也会转换为便于机器识别的IP地址。
1.DNS怎么将域名解析成IP地址?
DNS查询有两种方式:递归和迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。
首先会从缓存中找
首先浏览器会有一定频率地去缓存DNS的记录。
如果浏览器缓存中找不到,会去操作系统中查找。
路由器中也会有DNS缓存。
ISP互联网服务供应商,ISP 有专门的 DNS 服务器应对 DNS 查询请求。
待补充
2.TCP三次握手
获得服务器IP地址后,接下来就是与服务器建立连接了。
但建立连接有三个过程,所以叫三次握手。为什么要有这个过程
为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接
1.主机向服务器发送一个建立连接的请求 (你好)
2.服务器接到请求后发送同意连接的信号 (你好,很高兴认识你)
3.主机接到统一连接的信号,返回已经知道了发送同意连接的信号。 (我也很高兴认识你)
接下来就开始传递数据
3.发送HTTP请求
浏览器会根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等,(这里可以分支出请求是什么样的,还有请求的方式,例如GET / POST 一共8种)
服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;
4.服务器处理请求并返回 HTTP 报文
什么是服务器?什么是报文?
5.浏览器解析渲染页面
这里应该是做前端的重点关注步骤
一般为5个步骤
根据 HTML 解析出 DOM 树
根据 CSS 解析生成 CSS 规则树
结合 DOM 树和 CSS 规则树,生成渲染树
根据渲染树计算每一个节点的信息
根据计算好的信息绘制页面
首先,DOM树解析是深度优先遍历过程,探索中对所有的DOM节点知根知底,先构建当前节点所有子节点,再到下一节点(知识点:深度优先遍历和广度优先遍历)
在遇到<script>标签时
立即执行 <script src="a.js"> <script src="b.js">
顺序:保证先后顺序。解析:HTML 解析器遇到它们时,将阻塞(取停止解析),待脚本下载完成并执行后,继续解析标签之后的文档。
也可以在script标签上写上标识符来改变加载顺序
![image](https://user-images.githubusercontent.com/24204540/89419803-705bfe80-d764-11ea-81c9-4d3312fb4c57.png)
css规则
在解析css时候js会暂停到css解析好,
而且DOM树不会在css还没解析好时构建。
所以,css的大小可以一定程度决定网页加载速度
接下来是布局,浏览器采用流式布局
回流:当布局完成后,一些属性或者操作会导致某个元素的尺寸发生变化的话,那就要倒回去重新渲染
重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的重绘。
回流必将引起重绘,重绘不一定会引起回流。
6.断开连接:TCP 四次挥手
当数据传输完毕后,需要断开TCP连接,这时候就需要四次挥手了
由主机向服务器发起 第一次 (拜拜)
服务器接收到后返回确认接收消息 第二次(好的)
服务器向主机发送断开通知 第三次(那我也拜拜了)
主机接收到断开通知后断开,并返回一个断开信号 第四次 (ok)服务器收到后断开。
自此,baidu加载出来了,短短的时间这么多过程,每个细节还能再细分,果然计算机世界从0到1真的很有趣,不愧是人类最强发明。以后还要继续玩这些知识
待补充:从ip地址直接访问、端口号、网站备案。TCP。第四点,
文章参考
从键盘说起的深入级
从输入 URL 到页面加载完成的过程中都发生了什么
经典面试题:从 URL 输入到页面展现到底发生什么?
文章完成于2020/8/6