目录
简述
在浏览器中输入URL并回车后,主要发生以下步骤:
- 解析URL,获取要访问的域名
- DNS域名解析,根据访问的域名获得目标服务器的IP地址
- 浏览器与服务端三次握手建立TCP连接
- 连接建立成功之后就可以发送HTTP请求报文以及服务器返回HTTP响应报文
- 浏览器解析响应报文,渲染页面
如果主机IP地址还没有分配的话,会先利用DHCP配置主机IP地址,子网掩码等信息,然后地理ARP协议解析MAC地址。
URL解析
URL(Universal Resource Locator):统一资源定位符。俗称网页地址或者网址。
URL用来表示某个资源的地址。
URL主要由以下几个部分组成:
- 传输协议
- 服务器
- 域名
- 端口
- 虚拟目录
- 文件名
- 锚
- 参数
URL解析,就是当在浏览器中输入URL后,浏览器首先对拿到的URL进行识别,抽取出域名字段。
DNS域名解析
DNS解析(域名解析),DNS实际上是一个域名和IP对应的数据库。
IP地址往都难以记住,但机器间互相只认IP地址,于是人们发明了域名,让域名与IP地址之间一一对应,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。
可以在浏览器中输入IP地址浏览网站,也可以输入域名查询网站,虽然得出的内容是一样的但是调用的过程不一样,输入IP地址是直接从主机上调用内容,输入域名是通过域名解析服务器指向对应的主机的IP地址,再从主机调用网站的内容。
在进行DNS解析时,会经历以下步骤:
查询浏览器缓存:如果之前查询过域名,浏览器会保存IP地址与该域名的缓存一段时间
检查系统缓存:检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。
检查路由器缓存:路由器有自己的DNS缓存,可能就包括了这在查询的内容
查询ISP DNS 缓存:ISP服务商DNS缓存(本地服务器缓存)那里可能有相关的内容
递归查询:从根域名服务器到顶级域名服务器再到极限域名服务器依次搜索对应目标域名的IP。
浏览器与服务器建立TCP连接(三次握手)
第一次握手:客户端向服务器端发送请求(SYN=1) 等待服务器确认;
第二次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1);
第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
通过三次握手,建立了客户端和服务器之间的连接,现在可以请求和传输数据了。
发送HTTP请求报文和接收HTTP响应报文
连接建立后,发送HTTP请求,服务端接受到请求后会返回一个HTTP响应。
浏览器解析HTTP响应,渲染页面
客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。
- 浏览器会解析html源码,然后创建一个 DOM树。
在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点。
- 浏览器解析CSS代码,计算出最终的样式数据,形成css对象模型CSSOM。
首先会忽略非法的CSS代码,之后按照浏览器默认设置——用户设置——外链样式——内联样式——HTML中的style样式顺序进行渲染。
- 利用DOM和CSSOM构建一个渲染树(rendering tree)。
渲染树和DOM树有点像,但是是有区别的。
DOM树完全和html标签一一对应,但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等。
而且一大段文本中的每一个行在渲染树中都是独立的一个节点。
渲染树中的每一个节点都存储有对应的css属性。
- 浏览器就根据渲染树直接把页面绘制到屏幕上。