-
用户输入
- 浏览器判断用户输入得失搜索内容 还是 请求的 URL
- 回车后,浏览器给了当前页面一次执行 beforeunload 事件的机会,允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面
-
URL 请求过程
浏览器进程会通过进程间通信 IPC 把 URL 请求发送至网络进程,网络进程接收到 URL 请求后,发起真正的 URL 请求流程
- 进行 **DNS 解析:**获取请求域名的服务器 IP 地址,HTTPS协议需要建立 TLS 连接。
- 目的:找到域名对应的 IP 地址
- 解析过程
- 浏览器检查缓存中是否存在该 域名 解析过程,存在则返回页面资源并直接结束
- 操作系统中检查本地 hosts 文件是否有该网址映射关系,存在则优先调用此 IP 地址映射关系
- 查找本地 DNS 解析器缓存,存在则直接返回给浏览器
- 查找本地 DNS 服务器,服务器查找到对应映射关系或缓存信息,返回解析结果给客户机,完成域名解析
- 本地 DNS 服务器无法找到,根据本地 DNS 服务器设置的转发器进行查询:
- 未启用转发模式:把请求发送给根 DNS 服务器,进行迭代查询;根 DNS 服务器判断该域名由谁来授权管理,返回该顶级域名服务器地址,本地 DNS 服务器继续联系该服务器;该顶级域名服务器收到请求后,如果无法解析,则会找到一个管理该域名的下一级 DNS 服务器地址给本地 DNS 服务器;本地 DNS 服务器继续联系该域名服务器,重复上面动作,进行查询,直到找到该域名对应的主机 或者 超时终止。
- 使用转发模式:进行递归查询,查找上一级 DNS 服务器,若未找到则转发该请求 继续查找上一级 DNS 服务器,以此循环;查找到的结果最终会返回到 本地 DNS 服务器,再返回给客户机。
- ARP 协议:通过 IP 找到 MAC 地址
- 与服务器建立连接
- TCP 3次握手
- 客户端发起连接请求,标志位 SYN=1,序号 seq=x,并进入到 SYN_SEND 状态
- 服务端接收到连接请求,返回应答包:SYN=1,ACK=1,seq=y,ack=x+1,并进入 SYN_RECEIVED 状态
- 客户端接收到应答包,发送确认应答请求:ACK=1,ack=y+1,并进入 ESTABLISHED 状态;服务端接收到确认应答,直接进入到 ESTABLISHED 状态。至此,浏览器和服务器建立连接成功,可以发送请求和响应。
- 构建并发送 HTTP 请求信息
- 构建请求头
- 构建请求行
- 添加 相关的 Cookie 等数据 到请求头
- 发送到服务器
- 接收并生成响应数据
- 构建响应头
- 重定向:状态码 301 或 302,服务器需要浏览器重定向到其他 URL,通过 Location 字段里读取重定向地址,再发起新的 HTTP 或 HTTPS 请求。
- 构建响应行
- Content-Type:浏览器根据此值进行判断数据是什么格式,如 text/html 表示 HTML 格式、application/octet-stream 表示 字节流类型,字节流类型会按照下载类型来处理。
- 构建响应体
-
准备渲染进程
Chrome 会为每个页面分配一个渲染进程。同一站点[根域名+协议 均相同,端口、子域名可不同],新页面会复用父页面的渲染进程。
-
提交文档
浏览器进程将网络进程接收到的 HTML 数据提交给渲染进程
-
页面渲染
文档被提交之后,渲染进程便开始页面解析和子资源加载。页面生成完成之后,渲染进程会发送一个消息给浏览器进程,浏览器接收到消息后,会停止标签图标的加载动画。