用户在浏览器输入URL或者跳转到一个URL后发生了什么
一、从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后发生了什么的更多相关文章
- 用户在浏览器输入URL回车之后,浏览器都做了什么
在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...
- 从用户在浏览器输入URL回车之后,浏览器都做了什么
在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...
- C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作.在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法. 一.利用W ...
- 在浏览器输入网址到页面加载完毕中间到底发生了什么?(Browser-->Server)
最近在学习韩老师的php视频,中间有讲到发送请求到服务器返回内容,以前对这个理解并不深刻,虽然以前也知道一部分,这次听了之后收获良多:所以我就画了个流程图,从浏览器输入网址到服务器返回信息,浏览器渲染 ...
- HTTP-点开浏览器输入网址背后发生的那点事
前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ...
- 用户在浏览器中输入一个url发生的奥秘
在HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP 连接. http://207.200.83.29 ...
- 在浏览器输入URL后发生了什么?
摘录部分一:https://www.cnblogs.com/kongxy/p/4615226.html 从输入URL到浏览器显示页面发生了什么 当在浏览器地址栏输入网址,如:www.baidu.com ...
- 浏览器输入一个url到整个页面显示出来经历了哪些过程?
https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...
- 从一个url输入浏览器到页面渲染出来,这个过程都发生了哪些事情?
经典问题:在浏览器输入一个url后,会发生什么事情呢? (1)假设是简单的http请求(GET),IPV4,无代理. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,若缓存中有,请略过中间步骤,直接跳到 ...
随机推荐
- 使用C#检测电脑上是否安装某软件
private void button2_Click(object sender, EventArgs e) { try { string app = "chrome.exe"; ...
- Qt数据库之数据库连接池
前面的章节里,我们使用了下面的函数创建和取得数据库连接: void createConnectionByName(const QString &connectionName) { QSql ...
- linux 系统环境变量配置
使用Ubuntu 进行开发绕不开的就是环境变量的配置,由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,如果不了解其调用顺序,很有可能遇到配置了环境变量,而没有其作用的问题 ...
- EDM概念之A/B分类测试法
相信很多情况下大家都会看到A/B分类测试法这个专业术语,下面博主简要介绍下什么是A/B分类测试法. 这里的A和B主要是指两种不同版本的电子邮件.一般来说,可以将用户分为同等数量的两组,一组发送A版本, ...
- String对象的常见方法
String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...
- 【mysql】查询最新的10条记录
实现查询最新10条数据方法: select * from 表名 order by id(主键) desc limit 10 参考文档: MySQL查询后10条数据并顺序输出
- HTML5 表单的补充+注意事项
input标签中 type="image" 与 type="submit"属性 的区别 (下文简写image和submit) 1.这两者都可以响应请 ...
- jmeter的cookie跨线程传递
测试计划需要设置成独立运行每个线程组获取cookie需要先执行才能使接下来的cookie使用正确执行 登录线程组登录,使用正则表达式提取器提取所需cookie然后使用BeanShellPostProc ...
- diff patch比较文件打补丁
比较文件将结果保存到patch文件:diff -u test1.txt test2.txt > patchfile test1.txt应用patch文件,并备份(test1.txt.orig): ...
- C/C++ 内存模型
C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...