浏览器工作原理-HTTP协议
浏览器是多进程还是单进程的?
都知道js是单线程,js的运行环境在浏览器的v8引擎,那么浏览器也是单进程的吗?浏览器早期是将所有的功能统一在一个进程里面进行的,而现在的浏览器是多进程多线程的。js的执行环境v8只归浏览器的一个进程中的一个线程。
浏览器的进程有几个:
- 浏览器主进程: 负责界面显示,子进程的管理,提供存储功能。
- GPU进程:负责3D绘制相关的处理
- 渲染进程:任务是将html、css、js转换为页面。每一个tab页都是一个渲染进程。这也是为什么我们一个页面崩了其他页面不会受到影响。v8也在这个进程里面。
- 网络进程:负责网络资源的加载。
tcp/ip协议
我们的以太网有7层模型(osi模型),tcp/ip的四层模型对应osi的-层模型。而模型中的下层是为上层服务的。
tcp/ip的四层从上往下,分为应用层、传输层、网络层、数据链路层,我们的浏览器是在应用层。那么下层为上层服务来推,应用层有数据要传输,那么首先要知道传输给谁?谁传输的?ip地址可以做到这一点。因为ip在每一个电脑都是唯一的。所以可以用来确保传递到正确的地方。
应用层的数据块先到传输层,传输层给数据打上传输的标记,再到网络层。网络层就将数据加上ip报文。最后底层传输。
ip的作用
ip的作用就是标记谁传的,传给谁的标识符。解析、添加ip等信息。
tcp的作用
tcp的作用就是添加/解析传输的东西。
tcp的传输分为三个阶段
-
建立链接
在传输之前需要通过和服务器三次握手,建立共识之后,开始传输。通过三次交互确定号连接已经准备好了。
-
传输阶段
-
关闭链接
关闭链接有四次挥手,确定好数据已经传输完毕。通过四次取确认数据是否已经传输完毕。
http协议
http主要是用于客户端像服务其请求资源或者发送数据。
我们发送get请求整个流程是怎样的?
-
发起请求
浏览器会构建请求的行,行里包括请求方法、资源、http版本
-
查找缓存
浏览器部分内容会在本地缓存起来,所以我们发起请求会根据缓存策略去查找是否有缓存,有缓存直接读取缓存。
-
准备ip地址和端口等信息
表明我们向什么地方请求,告知服务器从什么地方来。
-
tcp链接
需要等到tcp链接建立完成。
-
发送http请求
输入url到页面显示流程
这一个完整的案例可以把之前的所有阶段串联起来。
输入url
- 用户输入url会有判断是搜索的关键字还是一个正常的ip或者域名。
- 是关键字,使用浏览器默认的搜索引擎进行搜索。
- 是域名浏览器主进程将这个请求转接到网络进程,由网络进程实际发起网络请求。但是在请求之前需要进入域名解析过程。
域名解析
- 域名解析的作用是将域名转换为ip。因为ip才是我们唯一识别服务器的标识。域名解析先是客户端查找本地缓存,找到了直接返回ip没找到向父级域名服务器请求,父级域名服务器查找本地缓存,找到返回,没找到,父级域名服务器像区域域名服务器请求,区域域名服务器又会查找自己的本地缓存。找到返回,没找到在向根域名服务器请求,根域名服务器就找缓存,缓存没有。就去自己的库找,没找到,返回错误。找到返回 。找到了服务器唯一的ip,
请求资源
- 请求,拿到了ip,网络进程就可以发起http请求,带上请求信息,以及唯一标识(ip)的信息。在等待tcp链接建立成功。通过tcp传输数据,
- 响应,服务器接收到请求,做出相应的返回。
- 断开tcp链接。如果在请求头或者返回头里面添加了保持链接的标识tcp将保持链接。下一次请求就省去了tcp建立链接的三次握手。
渲染
浏览器从服务器取得了html、css、js,渲染进程将利用这些东西,对页面进行渲染