导航流程:从输入URL到页面展示,这中间发生了什么?

“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题。涉及到一系列的知识考察:网络、操作系统、Web 等。

  1. 浏览器进程接收到用户输入的 URL 请求,浏览器进程便将该 URL 转发给网络进程。
  2. 在网络进程中发起真正的 URL 请求。
  3. 网络进程接收到了响应头数据,便解析响应头数据,并将数据转发给浏览器进程。
  4. 浏览器进程接收到网络进程的响应头数据之后,发送“提交导航 (CommitNavigation)”消息到渲染进程
  5. 渲染进程接收到“提交导航”的消息之后,便开始准备接收 HTML 数据,接收数据的方式是直接和网络进程建立数据管道。
  6. 最后渲染进程会向浏览器进程“确认提交”,这是告诉浏览器进程:“已经准备好接受和解析页面数据了”。
  7. 浏览器进程接收到渲染进程“提交文档”的消息之后,便开始移除之前旧的文档,然后更新浏览器进程中的页面状态。


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

用户发出 URL 请求到页面开始解析的这个过程,就叫做导航。

从输入URL到页面展示

一. 用户输入

用户在地址栏输入查询关键字后,地址栏会判断输入的是搜索内容还是请求的URL

  • 搜索内容:地址栏会使用浏览器默认的搜索引擎来合成新的带搜索关键字的URL。如在谷歌浏览器地址栏输入大山,回车,会看到地址栏的URL变为
    https://www.google.com/search?q=大山&oq=大山
  • 输入内容符合URL规则:地址栏会根据规则,在前面加上协议合成完整的URL,如:在谷歌浏览器地址栏输入baidu.com,回车,会看到地址栏的URL变为https://www.baidu.com/

浏览器开始加载一个地址后,标签页上的图标会变成loading,但页面还是显示之前的页面内容,因为需要等待提交文档阶段,页面内容才会被替换。

二. URL请求过程

网络进程会查找本地缓存是否缓存了该资源

  • 有缓存资源:直接返回资源给浏览器进程
  • 没有缓存资源:直接进入网络请求流程

网络请求流程步骤:

  1. 进行DNS解析,获取到请求域名服务器的IP地址
  2. 利用IP地址和服务器建立TCP连接
  3. TCP连接建立之后,构建请求行、请求头等信息,并把和该域名相关的Cookie等数据附加到请求头中
  4. 向服务器发送构建的请求信息
  5. 服务器根据请求信息生成响应数据,包括响应行、响应头和响应体等信息,并把响应数据发给网络进程
  6. 网络进程解析响应头
    6.1. 如果响应头中的状态码是301/302,网络进程会读取响应行中的Location字段并发起新的URL请求
    6.2. 如果响应头中的状态码是200,网络进程告诉浏览器一切正常,可以继续往下处理该请求了。
    如果响应头中的状态码是200,会继续解析Content-Type字段
    6.2.1. 如果返回的值标识是一个下载文件,则该请求会被提交给浏览器的下载管理器,URL请求的导航流程就此结束。
    6.2.2. 如果返回的值标识是一个HTML文件,浏览器会继续进行导航流程,即网络进程会把响应头数据转发给浏览器进程。

三. 准备渲染进程

  • 默认情况下,Chrome会为每个页面分配一个渲染进程。
  • 如果从A页面打开了B页面,而B页面和A页面属于同一站点的话,那么B页面会复用A页面的渲染进程。官方把这个默认策略叫 process-per-site-instance。

渲染进程准备好之后,还不能立即进入文档解析状态,因为此时的文档数据还在网络进程中,并没有提交给渲染进程,所以下一步就进入了提交文档阶段。

四. 提交文档

所谓的提交文档,是指浏览器进程将网络进程接收到的HTML数据提交给渲染进程。

  1. 浏览器进程接收到网络进程的响应头数据后,便向渲染进程发起“提交文档”的消息
  2. 渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”
  3. 文档传输完成后,渲染进程返回“确认提交”消息给浏览器进程
  4. 浏览器进程接收到“确认提交”的消息后,会更新浏览器的状态,包括安全状态、地址栏的URL、前进后退的历史状态,并更新Web页面。
    导航完成状态

    这也解释了为什么在浏览器地址栏输入一个URL后,原页面没有立马消失,而是要加载一会才更新页面。
    至此,一个完整的导航流程就走完了,之后就进入渲染阶段

渲染过程涵盖了从用户发起请求到提交文档给渲染进程的中间所有阶段。

五. 渲染阶段

文档被提交,渲染进程便开始页面解析和子资源加载。渲染流程参考下一篇文章。

文章内容参考极客时间 李兵老师的浏览器工作原理与实践课程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容