2

导航流程:浏览器输入URL到页面展示,中间发生了什么(http)

 2 years ago
source link: https://lianpf.github.io/posts/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%8E%9F%E7%90%86/03.%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BE%93%E5%85%A5url%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

导航流程:浏览器输入URL到页面展示,中间发生了什么(http)

2020-07-08

浏览器输入URL到⻚面展示完整流程主要涉及到:浏览器进程、网络进程和渲染进程。其中…

导航流程负责从输入URL到浏览器进程提交文档给渲染进程。渲染流程则负责HTML、CSS和JavaScript绘制成页面

从输入URL到⻚面展示完整流程示意图
图:从输入URL到⻚面展示完整流程示意图

如上所示:

  • 浏览器进程:主要负责用戶交互、子进程管理和文件储存等功能
  • 网络进程:发起HTTP请求流程为渲染进程和浏览器进程等提供网络下载功能
  • 渲染进程:把从网络下载的HTML、JavaScript、CSS、图片等资源,通过渲染流程解析为可显示和交互的⻚面

渲染进程所有的内容都是通过网络获取的,会存在一些恶意代码利用浏览器漏洞对系统进行攻击,所以运行在渲染进程里面的代码是不被信任的。Chrome会让渲染进程运行在安全沙箱里保证系统的安全。Gitee-cloud-notes: 计算机网络安全

其中,导航流程涉及到浏览器进程和网络进程,渲染流程涉及到渲染进程

二、详述导航流程&渲染流程

整个流程如下:

  1. 用户输入地址
  2. URL请求流程
    • HTTP请求流程: Blog: HTTP请求流程
      • DNS解析
      • TCP连接和TLS连接
      • 浏览器端发起HTTP请求和服务器端处理HTTP请求
      • 断开TCP连接(长连接待tab页关闭,自动断开TCP连接)
  3. 准备渲染进程
  4. 渲染阶段: HTML ParseRecalculate StyleLayoutUpdate Layer TreePaintComposite Layers、显示

1、用户输入地址

浏览器进程判断输入的关键字是搜索内容,还是请求的URL

  • 搜索内容:将其组装进默认搜索引擎的URL中进行搜索
  • 正则符合URL规则:构建 URL 请求并通过 IPC 通信将请求交给网络进程。从历史记录、书签等,找到已经输入的字符串可能对应的 url,给出智能提示,让你可以补全url地址

比如输入的是 time.geekbang.org,那么地址栏会根据规则,把这段内容加上协议,合成为完整的URL,如 https://time.geekbang.org

当浏览器刚开始加载一个地址 time.geekbang.org后,标签⻚上的图标便进入加载状态。但此时当前⻚面并没立即替换为极客时间的⻚面,显示的仍然是之前打开的⻚面内容。因为需要等待提交文档阶段,⻚面内容才会被替换

2、URL请求流程

浏览器进程通过进程间通信(IPC)把URL请求发送至网络进程,网络进程接收到URL请求发起真正的URL请求流程。

  • 查缓存:网络进程查找本地缓存是否缓存了该资源,有则直接返回资源给浏览器进程。无则进入网络请求(HTTP请求)流程
  • 网络请求(HTTP请求)流程
    • DNS解析:获取请求域名的服务器IP地址和端口
    • TCP连接和TLS连接
      • 请求协议是HTTPS,还需要建立TLS连接
      • 利用IP地址和服务器建立TCP连接,该过程可能会等待 TCP 队列
    • 发起构建请求:浏览器端构建请求行、请求头等信息,并把和该域名相关的Cookie等数据附加到请求头中,向服务器发送构建的请求信息
    • 服务器处理请求且响应:会根据请求信息生成响应数据(包括响应行、响应头和响应体等信息),并发给网络进程
    • 网络进程解析响应头:网络进程接收了响应行和响应头后,开始解析响应头的内容了。(为了方便讲述,下面将服务器返回的响应头和响应行统称为响应头)
      • 根据状态码做不同反应,400、500通知浏览器进程报错,301、302进入重定向,304缓存,200则正常
      • 如果正常或者缓存,则进一步查看 Content-type,针对不同的content-type,做不同的处理。ex:application/octet-stream 交给下载管理器处理,text/html 就通知浏览器进程准备渲染进程

2.1 DNS解析

DNS解析过程是寻找浏览器"所需资源"对应机器的过程。当在浏览器中输入地址http://www.baidu.com,但这不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但IP地址不便记忆。所以互联网设计者在用户的方便性与可用性方面做一个权衡,做了一个网址到IP地址的转换,这个过程就是DNS解析。而这个所谓的网址也就是域名

DNS服务器分为3个级别: 根级别DNS、顶级DNS、负责提供二级域名的DNS服务器IP地址

域名有三个部分,以zhuanlan.zhihu.com为例: com 是顶级域名, zhihu是二级域名, zhuanlan是三级域名(通常被称为子域名)

  • 根级别DNS: 负责提供各类顶级域名(如:com、cn、gov、deu等)对应的DNS服务器ip地址
  • 顶级DNS:负责提供二级域名的DNS服务器IP地址。每一个顶级域名都有对应的DNS的服务器,通常由专门的机构公司来维护。
    • 比如com由Verisign Global Registry Services公司维护,edu由Educause公司维护. 它们各自提供自家域名下的子域名(二级域名)的名称服务。
    • 通常所说的"购买域名"就是向这些公司的数据库注册一条记录
  • 权威DNS:负责提供三级域名对应的主机IP地址。由域名购买者搭建的,在购买域名时就要向注册机构提供,然后被录入到顶级DNS的数据库。现在的云主机服务商,都提供了托管权威DNS服务.

DNS查询解析过程
图: DNS查询解析过程

浏览器中输入www.qq.com域名,DNS查询解析过程

  • (1) 查找浏览器缓存:浏览器一般会缓存DNS记录一段时间,不同浏览器的时间可能不一样,一般2-30分钟不等,浏览器去查找这些缓存,如果有缓存,直接返回IP,否则下一步
  • (2) 本地的hosts文件:操作系统检查本地的hosts文件是否有这个网址映射关系,有则调用这个IP地址映射,完成域名解析
  • (3) DNS缓存:hosts里无此网址映射关系,则查找本地DNS解析器缓存,有则直接返回,完成域名解析

DNS 缓存(DNS caching)即DNS解析器缓存,是操作系统维护的临时数据库,包含最近的网站和其他Internet域的访问记录。实际,DNS缓存是计算机为了快速响应而把已加载过的资源缓存起来,便于再次访问时可以直接快速引用的技术手段

  • (4) 本地DNS服务器:都没有相应的网址映射关系,则会找TCP/IP参数中设置的首选DNS服务器,即本地DNS服务器。若在本地配置区域资源中包含,则返回解析结果给客户机,完成域名解析,此解析具有权威性
  • (5) 本地DNS服务器缓存:本地DNS服务器服务器缓存包含此网址映射关系,则调用此IP地址映射,完成域名解析。查询的域名不由本地DNS服务器区域解析,则此解析不具有权威性
  • (6) 本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)查询
    • 转发模式: 本地DNS服务器会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器若不能解析,则找根DNS或转请求转至上上级,以此循环
    • 根提示:未用转发模式
      • 本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后返回负责该顶级域名服务器的一个IP。
      • 本地DNS服务器收到IP信息,联系负责.com顶级域服务器。其收到请求后,若自己无法解析,则搜索二级域,二级域搜索三级域,直到找到需要解析的地址或名称,向本地DNS服务器发送回复消息。
      • 本地DNS服务器收到回复后存储在缓存中,然后发送解析结果给客户端

无论本地DNS服务器用转发或根提示,最后都把结果返回给本地DNS服务器,本地DNS服务器再返回给客户机。从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询

局部DNS服务器自己不能回答客户机的DNS查询时,就需要向其他DNS服务器进行查询。DNS查询解析的两种方式

1、递归查询解析:
如图所示。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端

2、迭代解析:
如图所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。即,迭代解析只帮你找到相关的服务器而已,不会帮你去查

2.2 TLS连接、TCP连接及断开连接

Gitee-cloud-notes: 计算机网络协议模型

TLS是在SSL的基础上标准化的产物,目前SSL3.0与TLS1.0保持一致的,二者是并列关系,只是大家习惯称呼SSL

若为https协议,则需要先建立TLS连接

主机浏览器通过DNS解析得到了目标服务器的IP地址后,与服务器建立TCP连接

浏览器发送HTTP请求,服务器接受请求、处理请求、返回响应。然后根据Connection请求头,决定是直接断开TCP连接,还是等浏览器渲染完页面再断开连接:

  • 如果是keep-alive服务器就保持住tcp连接
  • 如果没有或是close则服务器response传输完后主动关闭tcp连接

现在浏览器都是http1.1都默认是keep-alive的,在浏览器tab关闭时,tcp连接关闭

2.3 网络进程: 浏览器端发送http请求

Blog: Http请求流程

建立了TCP连接之后,发起一个http请求。一个典型的 http request header 一般需要包括请求的方法,例如 GET 或者 POST 等,不常用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法

2.4 网络进程: 服务端返回http响应

Blog: Http请求流程

服务器接受并处理完请求,返回 HTTP响应,一个响应报文格式基本等同于请求报文,由响应行、响应头、空行、实体组成

网络进程解析响应头-重定向
响应头返回的状态码是301或者302,意味着服务器需要浏览器重定向到其他URL。这时网络进程从响应头的Location字段读取重定向的地址,再发起新的HTTP或者HTTPS请求。即重复2.3和2.4的过程

3、浏览器进程:准备渲染进程

默认情况下,Chrome打开新的⻚面都会使用单独的渲染进程。但也有例外:

  • 内部有iframe:会另外再划分出单独的渲染进程(站点隔离)
  • 同一站点:如果从A⻚面打开B⻚面,且A和B都属于同一站点的话,那么B⻚面复用A⻚面的渲染进程。官方把这个默认策略叫process-per-site-instance

同一站点:表示根域名下的所有子域名和不同的端口。例如:https://time.geekbang.orghttps://www.geekbang.orghttps://www.geekbang.org:8080三个域名的协议都是HTTPS,而且根域名也都是geekbang.org

渲染进程准备好后,此时的文档数据还在网络进程中,并没有提交给渲染进程,所以下一步就进入了提交文档阶段

4、渲染进程:提交文档

这里的“文档”指URL请求的响应体数据

  • 浏览器进程发出“提交文档”消息,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”
  • 等文档数据传输完成后,渲染进程会返回“确认提交”的消息给浏览器进程
  • 浏览器进程收到“确认提交”的消息后,会更新浏览器界面状态,包括了安全状态(黑白名单、跨站攻击等)、地址栏的 URL、前进后退的历史状态,并更新 Web 页面

也解释了为什么在浏览器的地址栏里面输入了一个地址后,之前的⻚面没有立⻢消失,而是要加载一会儿才会更新⻚面

到此,导航阶段结束,之后进入渲染阶段

5、渲染阶段:浏览器解析渲染页面

Gitee-cloud-notes: 页面渲染阶段

浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。过程比较复杂,涉及两个重要概念:reflow(回流)和repain(重绘)

  • DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;
  • 当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。

页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain

浏览器两种渲染方式:

Firefox使用Geoko——Mozilla自主研发的渲染引擎,Safari和Chrome都使用webkit

webkit的主要流程:

Geoko的主要流程:

详细介绍请参考:https://www.cnblogs.com/slly/p/6640761.html


最后, 希望大家早日实现:成为前端高手的伟大梦想!
欢迎交流~

微信公众号

本文版权归原作者曜灵所有!未经允许,严禁转载!对非法转载者, 原作者保留采用法律手段追究的权利!
若需转载,请联系微信公众号:连先生有猫病,可获取作者联系方式!


Recommend

  • 88
    • zhuanlan.zhihu.com 6 years ago
    • Cache

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

  • 34

    这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。 这篇笔记是我这两天看了数十篇文章总结出来的,所以相对全面一点,...

  • 71

    前言 相信大家作为求职者或者面试官大概率都会遇到一道古老的面试问题:当你在浏览器中输入 google.com 并且按下回车之后发生了什么?这个问题可以考察的面非常广,针对不同岗位侧重点也不一样,更重要的是可以根据对方的回答挖掘知识掌握深度。本文授权转...

  • 19
    • 掘金 juejin.im 4 years ago
    • Cache

    细说浏览器输入URL后发生了什么

    总体概览 大体上,可以分为六步,当然每一步都可以详细都展开来说,这里先放一张总览图: DNS域名解析 在网络世界,你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿,就是 DNS 服务器。DNS 服务器是高可用、高并发和分布式的,它

  • 3

    《浏览器工作原理与实践》笔记之从输入URL到页面展示发生了什么如果您发现本文排版有问题...

  • 5

    在浏览器中输入URL后,执行的全部过程、也就是一次http请求的过程 DNS域名解析 1.DNS域名解析协议 DNS协议的产生主要是IP地址不便记忆,在TCP/IP协议中、起初有一个叫做主机识别码的机制,这种的识别的方式指的是为每...

  • 8

    整体上,可以分为以下几步:DNS 域名解析;建立 TCP 连接(三次握手);发送 HTTP 请求;服务器处理请求;返回响应结果;关闭 TCP 连接(四次握手);浏览器解析 HTML;浏览器布局...

  • 4

    本文来自于之前我发的一篇微博:不过写这篇文章并不是为了帮大家准备面试,而是想借这道题来介绍计算机和互联网的基础知识,让读者了解它们之间是如何关联...

  • 8

    从输入 URL 到页面显示发生了什么2020-12-16读了李兵老师的 浏览器的工作原理与实践,让我对浏览器的工作原理有了更加深刻的理解,尤其是从用户输入 URL 到页面显示这...

  • 5

    V2EX  ›  酷工作 前端的笔试题要求写出 浏览器输入 URL 后发生了什么,合理吗?  

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK