玩酷网

ByteByteGo绘制的经典面试问题“当你在浏览器中输入一个URL后发生了什么

ByteByteGo绘制的经典面试问题“当你在浏览器中输入一个URL后发生了什么”

1. 解析域名(Resolve Domain Name)

缓存查找:浏览器首先会在自己的缓存、操作系统缓存、本地缓存、或者互联网服务提供商(ISP)的缓存中查找域名对应的IP地址。如果缓存中有记录,直接使用缓存的IP;如果缓存未命中,进入下一步。

DNS解析器:浏览器联系DNS解析器(通常由ISP或公共DNS服务提供),解析域名为IP地址。

根名称服务器(Root Name Server):DNS解析器首先联系根服务器(.),根服务器告诉解析器哪个顶级域名服务器(TLD Name Server)负责处理域名的后缀(如.com)。

TLD名称服务器:接着,DNS解析器联系TLD服务器(例如.com的服务器),TLD服务器返回权威名称服务器(Authoritative Name Server)的信息。

权威名称服务器:最后,权威名称服务器告诉DNS解析器域名www.bytebytego.com对应的IP地址(如172.67.73.33)。

解析IP地址:浏览器得到这个域名的IP地址后,开始与服务器通信。

2. 发起请求(Initiate Request)

浏览器使用解析到的IP地址,向服务器发起HTTP请求。请求会包括一些基本信息,如HTTP版本、主机地址、用户代理、请求的内容类型和语言等。

GET请求:浏览器向服务器发送GET请求,要求服务器返回对应的网页资源。

3. 建立安全连接(HTTPS/TCP 3-Way Handshake)

如果请求使用HTTPS,浏览器和服务器之间会通过TCP三次握手来建立连接,同时进行安全的密钥交换。

加密过程:双方使用公钥交换数据,并生成会话密钥。之后的通信会用该会话密钥加密,确保数据的安全传输。

4. 处理服务器响应(Handle Response)

HTTP响应:服务器处理浏览器的请求后,会返回响应,包括HTML、CSS、JavaScript等资源,连同HTTP状态码(如200表示成功,404表示未找到,500表示服务器错误)。

状态码:不同状态码表示不同的响应结果,2xx表示成功,3xx表示重定向,4xx表示客户端错误,5xx表示服务器错误。

5. 解析与渲染网页(Handle Response and Rendering)

HTML解析:浏览器解析HTML,将其分解成一个个标记,构建DOM树(文档对象模型树),这是网页结构的基础。

CSS解析:浏览器解析CSS,将其转化为CSSOM树,定义网页的样式。

JavaScript执行:浏览器加载和执行JavaScript代码,更新网页的动态内容。

渲染树生成和绘制:浏览器将DOM树和CSSOM树结合,生成渲染树(Render Tree),并根据这个树结构在屏幕上绘制出网页。