- DNS解析和建立TCP连接
- 浏览器首先解析输入的网址,将其转换为对应的IP地址。如果域名已经缓存,则直接使用缓存的IP地址;否则,会向DNS服务器发送请求以获取IP地址。
- 使用获得的IP地址,浏览器与服务器建立TCP连接。这个过程包括三次握手,确保连接可靠。
- 发送HTTP请求
- 浏览器向服务器发送HTTP请求,请求网页的内容,这包括HTML文件、CSS文件、JavaScript文件、图片、视频等资源。
- 服务器处理请求并返回响应
- 服务器接收到请求后,根据请求内容进行处理,可能涉及数据库查询或动态页面生成等操作。
- 服务器将处理结果封装成HTTP响应,发送给浏览器,响应内容包括状态码、响应头信息和实际请求的内容。
- 接收响应数据并解析
- 浏览器接收服务器返回的数据,如果内容是HTML文件,则开始解析HTML文件并构建DOM树(文档对象模型),表示网页的结构。
- 同时,浏览器解析CSS文件,构建CSSOM树(样式对象模型),表示网页的样式信息。
- 构建渲染树和布局绘制
- 浏览器将DOM树和CSSOM树合并,构建渲染树(Render Tree),包含需要显示的节点和这些节点的样式信息。
- 接着进行布局或回流(Layout or Reflow),计算每个节点在页面中的位置和大小。
- 最后,浏览器使用计算好的布局信息将页面内容绘制到屏幕上。
- JavaScript解析和执行
- 如果HTML文件中包含JavaScript代码,浏览器会解析并执行这些代码。
- JavaScript的执行可能会影响页面的渲染过程,因为脚本的执行可能会修改DOM或CSSOM,这可能导致页面的重新布局或绘制。
这个过程涉及多个线程的协同工作,包括GUI渲染线程、JavaScript引擎线程等,它们之间有时会有互斥的关系,以确保页面的正确渲染。