浏览器原理与实践(1)

141 阅读3分钟

Chrome仅仅打开一个页面,为什么会有4个进程?下面文章将为您揭秘

浏览器的原理与实践(1)

Chrome仅仅打开一个页面,为什么会有4个进程

早期的单进程架构

所有的功能模块都在同一个进程中运行,包括网络,插件,js运行环境等 缺点:

  • 不安全
  • 不稳定
  • 不流畅
多进程架构

将功能分别在对应的进程中实现,浏览器进程可分为:

  • 浏览器主进程
  • 渲染进程
  • GPU进程
  • 插件进程
  • 网络进程

进程之间通过IPC进程通信,每个进程都是独立运行互不影响,每个Tab页都是独立的渲染进程,js即使阻塞也是阻塞当前页面的渲染,插件和渲染进程都是放到安全沙箱中,恶意程序无法突破沙箱获取系统权限

未来的浏览器架构

面向服务架构,每个进程都是独立的服务,可以解决原有架构高耦合,低内聚,不易扩展的缺点

扩充点:
  1. 同一站点,即根域名相同和协议相同
https://time.geekbang.org
https://www.geekbang.org
https://www.geekbang.org:8080
  1. 同一站点的页面,父页面子页面都属于同一站点,一个页面崩溃会导致同一站点的页面全部崩溃

TCP协议:如何保证页面文件能被完整送达浏览器?

  • IP地址,将数据包送达目的主机
  • 端口号,将数据包送到目的主机的应用程序
协议
UDP
  • 携带数据包,IP地址,端口号,将数据包送到目的主机
  • 缺点: 不能保证数据点额可靠性,单数传输速度很快,不提供重发功能,适用于音频和视频
TCP
  • 携带数据包,IP地址,端口号,以及序列号,将数据包送到目的主机
  • 面向连接,可靠基于字节流的传输层协议,提供重发功能,并且户按照序列号对数据包进行排序
  • 连接需要三次握手,断开需要四次挥手

UDP协议和TCP协议都是传输层协议,HTTP协议是基于TCP协议,是应用层协议

HTTP请求流程:为什么很多站点第二次打开速度会很快?

浏览器发起HTTP的请求流程
  1. 构建请求 GET /index.html HTTP1.1
  2. 查找缓存,如果没有缓存则发送请求查询服务器
  3. 准备IP地址和端口号,IP地址通过DNS进行解析域名进行查询,DNS第一次查询到之后会进行缓存
  4. 等待TCP队列,HTTP1协议规定一次只能发送6个请求
  5. 建立TCP连接
服务器处理HTTP请求
  1. 返回请求,包含状态码和响应体数据,可以通过命令curl -i baidu.com
  2. 断开连接,如果需要继续进行查询则不需要断开连接
  3. 重定向,可以通过命令curl -I baidu.com
为什么很多站点第二次打开速度会很快

第一次查询的时候会将DNS和页面资源缓存起来,一般通过HTTP响应头来设置,Cache-Control:Max-age=2000,如果缓存过期了,需要继续发起网络请求则需要在HTTP请求头中带上,If-None-Match: "4f80f-13c-3a1xb12a",服务器或根据值来判断资源时候需要更新

登录状态如何保存

浏览器输入用户名和密码发送,服务器验证通过之后会设置响应头尾Set-Cookie: UID-343luad,浏览器接受到之后会缓存起来,再次发送的时候只需要将请求头设置为Cookie: UID=3431uad;服务器接受到之后就会验证是否正确