产业气象站:URL 到页面展示过程发生了什么?,(详解)从浏览器输入

对于面试常问的从浏览器输入URL到页面展示过程发生了什么? , 我想大家都或多或少能说出一二 。 但是 , 其实这个问题很有深度 , 而你是否回答的有深度 , 在很大程度上会影响到面试官对你的印象 。
并且 , 网上各种资料都是浅尝辄止地讲解这个过程 , 经常会出现今天看到这个版本 , 明天看到另一个版本地情况 。 所以 , 这次我们就来深入浅出一下这整个过程~
一、Chrome多进程架构
首先 , 在开始讲解整个过程前 , 我们需要认识一下Chrome多进程架构 。 因为 , 从浏览器输入URL到页面渲染的整个过程都是由Chrome架构中的各个进程之间的配合完成 。
Chrome的多进程架构:
浏览器进程 , 它负责用户界面(地址栏、菜单等等)、子进程的管理(例如 , 进程间通信和数据传递)、存储等等渲染进程 , 它负责将接收到的HTML文档和JavaScript等转化为用户界面网络进程 , 它负责网络资源的请求 , 例如HTTP请求、WebSocket模块GPU(图形处理器)进程 , 它负责对UI界面的展示插件进程 , 它负责对插件的管理二、过程详解
2.1解析输入
发生这个过程的前提 , 用户在地址栏中输入了URL , 而地址栏会根据用户输入 , 做出如下判断:
输入的是非URL结构的字符串 , 则会用浏览器默认的搜索引擎搜索该字符串输入的是URL结构字符串 , 则会构建完整的URL结构 , 浏览器进程会将完整的URL通过进程间通信 , 即IPC , 发送给网络进程2.2请求过程
在网络进程接收到URL后 , 并不是马上对指定URL进行请求 。 首先 , 我们需要进行DNS解析域名得到对应的IP , 然后通过ARP解析IP得到对应的MAC(MediaAccessControlAddress)地址 。
域名是我们取代记忆复杂的IP的一种解决方案 , 而IP地址才是目标在网络中所被分配的节点 。 MAC地址是对应目标网卡所在的固定地址 。
1.DNS解析
而DNS解析域名的过程分为以下几个步骤:
询问浏览器DNS缓存询问本地操作系统DNS缓存(即查找本地host文件)询问ISP(InternetServiceProvider)互联网服务提供商(例如电信、移动)的DNS服务器询问根服务器 , 这个过程可以进行递归和迭代两种查找的方式 , 两者都是先询问顶级域名服务器查找2.通信过程
首先 , 建立TCP连接 , 即三次握手过程:
客户端发送标有SYN的数据包 , 表示我将要发送请求 。 服务端发送标有SYN/ACK的数据包 , 表示我已经收到通知 , 告知客户端发送请求 。 客户端发送标有ACK的数据包 , 表示我要开始发送请求 , 准备被接受 。
产业气象站:URL 到页面展示过程发生了什么?,(详解)从浏览器输入
文章图片
然后 , 利用TCP通道进行数据传输:
服务端接收到数据包 , 并发送确认数据包已收到的消息到客户端 , 不断重复这个过程客户端在发送一个数据包后 , 未接收到服务端的确定消息 , 则重新发送该数据包 , 即TCP的重发机制当接收完所有的数据包后 , 接收端会按照TCP头中的需要进行排序 , 形成完整的数据最后 , 断开TCP连接 , 即四次握手过程:
客户端发送请求 , 申请断开连接 , 进入等待阶段 , 此时不会发送数据 , 但是会继续接收数据 。 服务端接收请求后 , 告知客户端已明白 , 此时服务端进入等待状态 , 不会再接收数据 , 但是会继续发送数据 。 客户端收到后 , 进入下一阶段等待 。 服务端发送完剩余的数据后 , 告知客户端可以断开连接 , 此时服务端不会发送和接收数据 。 客户端收到后 , 告知服务端我开始断开连接 。 服务端收到后 , 开始断开连接 。
产业气象站:URL 到页面展示过程发生了什么?,(详解)从浏览器输入
文章图片
而这整个过程的客户端则是网络进程 。 并且 , 在数据传输的过程还可能会发生的重定向的情况 , 即当网络进程接收到状态码为3xx的响应报文 , 则会根据响应报文首部字段中的Location字段的值进行重新向 , 即会重新发起请求


推荐阅读