浏览器解析网址的过程
问题
浏览器解析网址的过程
我的回答
当你在浏览器地址栏输入一个URL(比如www.example.com)并按下回车后,会发生以下一系列步骤:
首先,浏览器会解析URL结构,确定要访问的协议、域名和路径。如果你没有输入协议部分,浏览器会自动添加"http://"或"https://",现在大多数浏览器默认是HTTPS。
接下来是DNS解析阶段。浏览器需要把域名转换成IP地址才能建立连接。这个过程会按顺序查询浏览器缓存、操作系统缓存、本地hosts文件,如果都没找到,就会向DNS服务器发起请求。DNS查询过程可能会经过多级服务器,比如,解析www.example.com可能会先查询根域名服务器,然后是.com服务器,最后是example.com的权威DNS服务器,最终得到IP地址,比如"93.184.216.34"。
获得IP地址后,浏览器会与服务器建立TCP连接,这就是著名的"三次握手"过程:客户端发送SYN包,服务器回应SYN-ACK包,客户端发送ACK包确认
如果是HTTPS网站,在TCP连接建立后还需要进行TLS握手,这个过程包括:客户端发送支持的加密算法列表和随机数,服务器选择加密算法,发送证书和另一个随机数,客户端验证证书,生成预主密钥并加密发送给服务器,双方根据交换的信息生成会话密钥,确认加密通信可以开始
连接建立后,浏览器会发送HTTP请求到服务器,包括请求方法(如GET)、路径、HTTP版本、各种请求头等信息。
服务器处理请求后返回HTTP响应,包含状态码(如200 OK)、响应头和响应体(通常是HTML内容)。
浏览器收到HTML后开始解析渲染过程:解析HTML构建DOM树,解析CSS构建CSSOM树,将DOM和CSSOM合并成渲染树,计算元素位置和大小(布局/回流),将页面绘制到屏幕上
在解析HTML的过程中,如果遇到外部资源(如CSS、JavaScript、图片等),浏览器会发起新的请求来获取这些资源。JavaScript可能会阻塞渲染,这也是为什么我们通常建议将JS放在底部或使用async/defer属性。
页面交互完成后,当浏览器或服务器决定关闭连接时,会进行TCP的"四次挥手"来终止连接:发起方发送FIN包,接收方发送ACK确认,接收方发送FIN包,发起方发送ACK确认