一、从URL到页面渲染的整个过程
1)处理用户输入
2)开始导航
3)读取响应
4)查找渲染进程
5)确认导航
6)渲染页面

二、每一步做了哪些事情

1)处理用户的输入

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

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

2)开始导航

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

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

2.1)dns域名解析

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

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)页面渲染

经典的渲染过程

用户在浏览器输入URL或者跳转到一个URL后发生了什么的更多相关文章

  1. 用户在浏览器输入URL回车之后,浏览器都做了什么

    在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...

  2. 从用户在浏览器输入URL回车之后,浏览器都做了什么

    在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...

  3. C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集

    在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作.在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法. 一.利用W ...

  4. 在浏览器输入网址到页面加载完毕中间到底发生了什么?(Browser-->Server)

    最近在学习韩老师的php视频,中间有讲到发送请求到服务器返回内容,以前对这个理解并不深刻,虽然以前也知道一部分,这次听了之后收获良多:所以我就画了个流程图,从浏览器输入网址到服务器返回信息,浏览器渲染 ...

  5. HTTP-点开浏览器输入网址背后发生的那点事

    前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ...

  6. 用户在浏览器中输入一个url发生的奥秘

    在HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP 连接. http://207.200.83.29 ...

  7. 在浏览器输入URL后发生了什么?

    摘录部分一:https://www.cnblogs.com/kongxy/p/4615226.html 从输入URL到浏览器显示页面发生了什么 当在浏览器地址栏输入网址,如:www.baidu.com ...

  8. 浏览器输入一个url到整个页面显示出来经历了哪些过程?

    https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...

  9. 从一个url输入浏览器到页面渲染出来,这个过程都发生了哪些事情?

    经典问题:在浏览器输入一个url后,会发生什么事情呢? (1)假设是简单的http请求(GET),IPV4,无代理. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,若缓存中有,请略过中间步骤,直接跳到 ...

随机推荐

  1. 使用C#检测电脑上是否安装某软件

    private void button2_Click(object sender, EventArgs e) { try { string app = "chrome.exe"; ...

  2. Qt数据库之数据库连接池

     前面的章节里,我们使用了下面的函数创建和取得数据库连接: void createConnectionByName(const QString &connectionName) { QSql ...

  3. linux 系统环境变量配置

    使用Ubuntu 进行开发绕不开的就是环境变量的配置,由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,如果不了解其调用顺序,很有可能遇到配置了环境变量,而没有其作用的问题 ...

  4. EDM概念之A/B分类测试法

    相信很多情况下大家都会看到A/B分类测试法这个专业术语,下面博主简要介绍下什么是A/B分类测试法. 这里的A和B主要是指两种不同版本的电子邮件.一般来说,可以将用户分为同等数量的两组,一组发送A版本, ...

  5. String对象的常见方法

    String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...

  6. 【mysql】查询最新的10条记录

    实现查询最新10条数据方法: select * from 表名 order by id(主键) desc limit 10 参考文档: MySQL查询后10条数据并顺序输出

  7. HTML5 表单的补充+注意事项

    input标签中  type="image" 与 type="submit"属性   的区别    (下文简写image和submit) 1.这两者都可以响应请 ...

  8. jmeter的cookie跨线程传递

    测试计划需要设置成独立运行每个线程组获取cookie需要先执行才能使接下来的cookie使用正确执行 登录线程组登录,使用正则表达式提取器提取所需cookie然后使用BeanShellPostProc ...

  9. diff patch比较文件打补丁

    比较文件将结果保存到patch文件:diff -u test1.txt test2.txt > patchfile test1.txt应用patch文件,并备份(test1.txt.orig): ...

  10. C/C++ 内存模型

    C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...