1、从URL到页面渲染的整个过程
1)处理用户输入
2)开始导航
3)读取响应
4)查找渲染进程
5)确认导航
6)渲染页面javascript
2、每一步作了哪些事情css
1)处理用户的输入html
浏览器的UI 线程处理用户的输入,判断是跳转过来的仍是用户本身的输入。java
判断依据是请求报文中referer这个参数,值是NUll,用户本身手动输入。浏览器
2)开始导航缓存
用户敲了回车以后,监听用户行为的UI线程告诉network线程去获取网页;同时本身进入loading状态。安全
network线程如何获取网页资源的呢?服务器
2.1)dns域名解析网络
2.1.1)什么是dns域名解析?怎么进行的域名解析呢?
由于网络通讯是基于tcp/IP的,tcp/ip是基于IP地址的,因此对于域名是没法识别的,人们对于超过10位的IP地址记忆起来又有难度,因此就出现了域名;主机上用户配置了域名对应的子目录,当访问对应的域名时,就能够经过解析访问到对应子目录中的文件。tcp
2.1.2)域名解析:
每一个PC端或者手机端都是一个DNS客户端。
浏览器将URL中的域名提取出来给DNS客户端;
dns客户端向DNS服务器发起请求报文,报文中包含URL给的主机名;经过一系列的缓存查询和分布式DNS集群查询;
dns客户端收到响应报文,里边包含主机名对应的IP地址;
浏览器获取到IP地址,就能够向IP地址所在的Http服务器发送http请求了。
2.1.3)创建http链接
安全的数据传输必须创建tls链接,通过三次握手完成该项工做。
2.1.4)发起http请求
3)读取响应
当请求响应返回的时候,network 线程会依据 Content-Type 及 MIME Type sniffing 判断响应内容的格式;
常见的有text/html,text/css,text/javascript,image/gif,image/png,等等;
HTML格式文件的处理network线程通知UI线程完成资源获取,UI线程会寻找渲染进程;
其余格式的文件都交给下载管理器来作了,恶意站点和敏感字段的检查也会在该阶段完成。
4)寻找渲染进程,确认导航
network thread 确信浏览器能够导航到请求网页,network thread 会通知 UI thread 数据已经准备好,UI thread 会查找到一个 renderer process 进行网页的渲染。
当 UI 线程发送 URL 请求给 network 线程时,浏览器其实已经知道了将要导航到那个站点。UI thread 会并行的预先查找和启动一个渲染进程,若是一切正常,当 network thread 接收到数据时,渲染进程已经准备就绪了,可是若是遇到重定向,准备好的渲染进程也许就不可用了,这时候就须要重启一个新的渲染进程。
Browser Process 会给 renderer process 发送 IPC 消息来确认导航,一旦 Browser Process 收到 renderer process 的渲染确认消息,导航过程结束,页面加载过程开始。
5)页面渲染
经典的渲染过程