【前端】面试八股文——输入URL到页面展示的过程

【前端】面试八股文------输入URL到页面展示的过程

1. DNS解析

当用户在浏览器中输入URL并按下回车时,首先需要将域名转换为IP地址,这个过程称为DNS(域名系统)解析。具体步骤如下:

  • 浏览器缓存:浏览器首先检查自身缓存中是否有该域名的IP地址。
  • 操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统请求DNS信息。
  • 路由器缓存:如果操作系统缓存也没有找到,操作系统会向本地网络中的路由器请求DNS信息。
  • ISP DNS服务器:如果路由器缓存没有命中,路由器会向ISP提供的DNS服务器请求域名解析。
  • 递归查询:如果ISP的DNS服务器也没有找到,它会进行递归查询,从根DNS服务器开始,逐级查询顶级域(如.com)、二级域等,直到找到对应的IP地址。

2. TCP连接

获得IP地址后,浏览器需要与服务器建立连接,这通常通过三次握手完成:

  • 第一次握手:浏览器(客户端)发送一个带有SYN标志的数据包到服务器,表示请求建立连接。
  • 第二次握手:服务器收到SYN数据包后,回复一个带有SYN/ACK标志的数据包,表示同意建立连接。
  • 第三次握手:客户端收到SYN/ACK数据包后,再回复一个带有ACK标志的数据包,连接建立完成。

3. 发送HTTP请求

TCP连接建立后,浏览器会构建一个HTTP请求报文并发送到服务器:

  • 请求行:包含请求方法(如GET、POST)、URL和HTTP版本。
  • 请求头:包含主机、用户代理、接受的文件类型等信息。
  • 请求体:对于GET请求通常为空,对于POST请求包含提交的数据。

4. 服务器处理请求

服务器接收到HTTP请求后,会进行以下操作:

  • 请求解析:解析请求报文,提取请求的资源路径和其他信息。
  • 资源查找:根据请求路径查找对应的资源(如HTML文件、图像等)。
  • 生成响应:将查找到的资源封装到HTTP响应报文中,准备返回给客户端。

5. 浏览器接收响应

浏览器接收服务器的响应报文,并进行解析:

  • 状态行:包含HTTP版本、状态码(如200、404)和状态描述。
  • 响应头:包含内容类型、内容长度、服务器信息等。
  • 响应体:包含实际的资源内容(如HTML、CSS、JavaScript等)。

6. 渲染页面

浏览器根据响应内容开始渲染页面,步骤如下:

  • 解析HTML:浏览器解析HTML文件,构建DOM树。
  • 解析CSS:解析CSS文件,构建CSSOM树。
  • 构建渲染树:将DOM树和CSSOM树合并,生成渲染树。
  • 布局(layout):计算每个元素的大小和位置。
  • 绘制(painting):将渲染树中的元素绘制到屏幕上。

7. 执行JavaScript

浏览器解析并执行HTML中的JavaScript:

  • 解析脚本:浏览器解析并执行内嵌的或外部引用的JavaScript。
  • 操作DOM:JavaScript可能会操作DOM,改变页面内容。
  • 重新渲染:如果JavaScript修改了DOM,浏览器可能会重新计算布局和绘制页面。

8. 加载其他资源

HTML文件中可能引用了其他资源(如图片、视频、字体等),浏览器会根据需要加载这些资源:

  • 并行加载:浏览器可以并行发送多个HTTP请求以加快资源加载速度。
  • 处理响应:每个资源的加载过程与主HTML文件类似,会经过DNS解析、TCP连接、HTTP请求和响应处理等步骤。

9. 建立安全连接(HTTPS)

如果使用HTTPS,浏览器在建立TCP连接后会进行SSL/TLS握手,以建立加密通道:

  • 协商加密算法:客户端和服务器协商使用的加密算法。
  • 交换密钥:客户端和服务器交换密钥,建立加密通信通道。
  • 验证证书:客户端验证服务器的SSL证书是否有效。

10. 优化性能

浏览器会进行一些性能优化,以提高页面加载速度和用户体验:

  • 缓存:缓存常用资源以减少重复加载。
  • 预加载:提前加载可能用到的资源。
  • 压缩:对资源进行压缩以减少传输的数据量。
  • 使用HTTP/2:HTTP/2支持多路复用、头部压缩等特性,提高传输效率。

通过这些详细的步骤,输入URL到页面完全展示的整个过程得以实现。理解这个过程不仅有助于提升前端开发的技术水平,也有助于优化页面加载速度,提高用户体验。

相关推荐
自信的未来1 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
我叫黑大帅1 小时前
MySQL 并发插入竞态问题:原子写入实践指南
后端·mysql·面试
SRET1 小时前
Mineradio 沙盒隔离安装完全指南 | 一键安全运行 Electron 应用!!!
javascript·经验分享·安全·electron·aigc·音视频·ai编程
全栈前端老曹1 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
zhangxingchao2 小时前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
我叫黑大帅2 小时前
别再手动写 updated_at了,这坑我踩过
后端·面试·go
ShineWinsu3 小时前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp
zhangxingchao3 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
gyx_这个杀手不太冷静3 小时前
Agent开发进阶指南(第 1 章):AI Agent 到底是什么?
前端·agent·ai编程
咖啡星人k4 小时前
从Vibe Coding到Prompt Engineering:AI编程的新技能树
面试·职场和发展·ai编程