当在浏览器地址栏中输入地址,并且按下回车键时,都发生了什么。

286 阅读3分钟

相关名词:

进程、线程、URL、DNS、HTTP

当在浏览器地址栏中输入地址,并且按下回车键时,浏览器会执行以下步骤:

  1. 解析URL:浏览器会解析地址栏中输入的URL,将其分解为协议、主机名、端口号、路径等信息。
  2. DNS查询: 浏览器会通过DNS查询将主机名转换成IP地址。如果DNS缓存中已经存在IP地址,则直接使用缓存中的地址。
  3. 建立TCP连接:浏览器会使用HTTP协议建立与服务器的TCP连接。TCP连接的建立需要进行三次握手,客户端向服务器发送SYN包,服务器回复SYN-ACK包,客户端再回复ACK包。
  4. 发送HTTP请求:浏览器会向服务器发送HTTP请求,请求中包括请求方法、请求头、请求体等信息。
  5. 接收HTTP响应:服务器收到浏览器的请求后,会返回HTTP响应,响应中包括状态码、响应头、响应体等信息。
  6. 解析HTML:浏览器接收到响应后,会根据响应头中的Content-Type字段确定响应体的类型,如果是HTML页面,则开始解析HTML。
  7. 解析CSS:浏览器解析HTML时,会同时解析其中的CSS样式。
  8. 解析JavaScript:浏览器解析JavaScript时,会停止解析HTML。
  9. 渲染页面:浏览器根据HTML、CSS和JavaScript等信息,将页面渲染到屏幕上。

谁在帮浏览器干活(进程和线程):

在打开浏览器后,Chrome浏览器会启动多个进程来执行任务。

  1. Browser Process:浏览器进程,控制应用中的 'Chrome'部分,包括地址栏,书签,回退与前进按钮,以及网络请求与文件访问。
  2. Renderer Process: 渲染进程,控制标签页面展示。
  3. Plugin Process: 插件进程,比如Flash、JSONView等
  4. GPU Process: GPU进程,用来处理独立于其它进程的GPU任务。浏览器的 GPU 进程用于处理浏览器中与图形相关的任务。可以协助浏览器更加高效地执行图形处理任务,如渲染网页中的图像、视频和动画等。

在Chrome 浏览器中,每个标签页都运行在一个单独的渲染进程中(Renderer Process),而每个进程又包含多个线程。 进程就像一个工厂里面的车间,线程就像车间里的人。

  1. 解析URL 是在渲染器进程中的网络线程中完成的。

  2. DNS查询 ----- 网络线程

  3. 发送HTTP请求 ----- 网络线程

  4. 接收HTTP请求 ----- 网络线程。 Chrome浏览器的渲染进程中的网络线程负责处理网络请求和响应。它是一个独立的线程,独立于主线程和其它线程。

  5. 解析HTML、CSS和JavaScritp,然后渲染到屏幕上。

参考资料:
图解浏览器的基本工作原理 zhuanlan.zhihu.com/p/47407398
[译] 现代浏览器内部揭秘 juejin.cn/post/684490…
进程与线程的一个简单解释 www.ruanyifeng.com/blog/2013/0…