重温一下计算机网络的重要知识
例如:当我们在web浏览器的地址栏中输入:www.baidu.com
并回车,具体发生了什么。
- 第一层理解
- 对网址进行DNS域名解析,得到对应的公网IP地址
- 根据这个IP,找到对应的服务器,发起TCP的三次握手
- 建立TCP连接后发起HTTP请求
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(比如js、css、图片等)注意:要得到html代码,才能去找到这些资源
- 浏览器对页面进行渲染呈现给用户
- 服务器关闭TCP连接
-
过程再推演 依旧是1.0版本:
(1)url(www.baidu.com) => ip(比如:192.168.1.2)
(2)拿到ip去跟服务器建立tcp连接
(3)建立tcp连接之后发起http请求(tcp是比http更底层的一个连接协议)
(4)http连接建立之后,服务器把html发送给浏览器
(5)浏览器解析html(js文件,css文件,图片 下载 运行)
(6)浏览器渲染html
(7)服务器关闭连接 -
进阶2.0:
(1)DNS如何找到域名:采用递归查询的方式 先去DNS缓存里找 ->缓存中没有就去根域名服务器里找->根域名服务器又会寻找下一级
(2)为什么HTTP协议要基于TCP来实现:TCP是一个端到端的可靠的面向连接的协议,HTTP(位于应用层)基于TCP(位于传输层)协议不用担心数据传输可能会发生的各种问题(比如发生错误之后TCP支持重传)
(3)浏览器是如何对页面进行渲染的:
①解析html文件构成DOM树
②解析css文件生成css渲染树,html生成的dom树和css生成的css渲染树一起构成一颗html渲染树
③一边解析,一边渲染。
④js单线程运行,js有可能修改DOM结构,意味着js执行完成前,后续所有资源的下载是没有必要的。 -
3.0版本
(1)url =>ip
①从浏览器自身域名缓存中查找
②从操作系统的域名缓存中查找
③从hosts文件(记录ip和域名之间的映射关系的一个文件)中查找(这一步我们可以进行人为干预,通过更改hosts文件)
④从域名服务器中查找
(2)web这边是如何渲染的:
reflow(回流)和repain(重绘)