面试的时候经常被问到:在浏览器中输入https://www.baidu.com/index.html会发生什么?那么就利用这篇博客来总结一下,在这个过程中浏览器究竟做了什么
对URL的理解,请参考博客:URL初识
总体来说,会有以下几个过程:
(1)DNS域名解析
(2)建立TCP连接(三次握手)
(3)HTTP发起请求
(4)浏览器接收HTTP响应
(5)渲染页面
(6)关闭TCP连接(四次挥手)
1、DNS域名解析
在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到对应的服务器,而是要通过 IP 地址。
但是为什么不直接用IP地址呢?因为IP地址是一个32位的二进制数,相较于域名来说记忆更加困难,所以使用域名更方便记忆。
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。
域名解析流程
首先浏览器需要将URL解析为IP地址,解析域名用到的是DNS协议,首先查询浏览器缓存,如果没有会继续访问本机的hosts文件,因为hosts文件中会保存之前访问过网站的域名和IP数据,如果hosts文件中依然没有,就给本地DNS发送查询请求
DNS查询有两种方式:递归查询和迭代查询
递归查询:本地的DNS服务器向根域名服务器发送查询请求,根域名向一级域名服务器发送查询请求,依次类推直到查询到该域名的IP地址,再依次返回,最后根域名服务器将IP地址返回给本地DNS服务器;
迭代查询:本地NDS服务器向根域名服务器发送查询请求,根域名返回一级域名服务器的地址,然后DNS服务器再向一级域名服务器发送查询请求,以此类推,直到查询到对应的IP地址返回给DNS服务器
为了加速DNS解析的过程,如果近期访问过的网页,很有可能缓存在本地的hosts文件,这样再次访问,就不需要去服务器拿数据,直接访问本地缓存数据,可以降低服务器的压力,提高响应速度。
2、建立TCP连接
TCP连接的详细过程,请参考博客:三次握手
3、HTTP发起请求
HTTP请求报文格式如下:
HTTP的具体信息,请参考博客:HTTP协议
4、HTTP响应
HTTP响应报文格式如下:
HTTP的具体信息,请参考博客:HTTP协议
5、渲染页面
6、关闭TCP连接
四次挥手详细内容,请参考博客:四次挥手