用户在浏览器输入URL或者跳转到一个URL后发生了什么

一、从URL到页面渲染的整个过程

1 处理用户输入

2 开始导航

3 读取响应

4 查找渲染进程

5 确认导航

6 渲染页面

二、每一步做了哪些事情

1 处理用户的输入

浏览器的UI 线程处理用户的输入,判断是跳转过来的还是用户自己的输入

判断依据是请求报文中referer这个参数,值是NUll,用户自己手动输入

2 开始导航

用户敲了回车之后,监听用户行为的UI线程告诉network线程去获取网页;同时自己进入loading状态

network线程如何获取网页资源的呢?

  •       dns域名解析

      什么是dns域名解析?怎么进行的域名解析呢?

      因为网络通信是基于tcp/IP的,tcp/ip是基于IP地址的,所以对于域名是无法识别的,人们对于超过10位的IP地址记忆起来又有难度,所以就出现了域名;主机上用户配置了域名对应的子目录,当访问对应的域名时,就可以通过解析访问到对应子目录中的文件。

     域名解析:

     每个PC端或者手机端都是一个DNS客户端。

     浏览器将URL中的域名提取出来给DNS客户端;

     dns客户端向DNS服务器发起请求报文,报文中包含URL给的主机名;通过一系列的缓存查询和分布式DNS集群查询;

     dns客户端收到响应报文,里边包含主机名对应的IP地址;

     浏览器获取到IP地址,就可以向IP地址所在的Http服务器发送http请求了。

  •    建立http连接

   安全的数据传输必须建立tls连接,经过三次握手完成该项工作

   用户在浏览器输入URL或者跳转到一个URL后发生了什么_第1张图片

  • 发起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 页面渲染

  经典的渲染过程

用户在浏览器输入URL或者跳转到一个URL后发生了什么_第2张图片

参考链接:https://www.jianshu.com/p/5a52f2492759

 

你可能感兴趣的:(技术使用)