经典面试题:“从输入URL到展示出页面“这个过程发生了什么?

目录

🐳今日良言:在逆境中善待自己

🐇一、输入网址(URL)

🐇二、域名查询(DNS解析)

🐇三、建立TCP连接

🐇四、发送HTTP/HTTPS请求

🐇五、服务器响应请求

🐇六、浏览器解析渲染页面

🐇七、断开TCP连接


🐳今日良言:在逆境中善待自己

🐇一、输入网址(URL)

"从输入URL到展示出页面"这个过程发生了什么?

总结来说就是七步.第一步:在浏览器中输入网址(URL)

首先来介绍一下:什么是URL?

URL是唯一资源定位符.

标识了互联网上唯一的资源的位置(资源在哪个服务器的目录下的哪个文件)

URL最关键的四个部分:

1)域名/IP

2)端口号

3)带层次的文件路径.

4)查询字符串.

一个URL这几个部分,有的可以省略.

以:https://www.sogou.com/  为例:

https是协议方案名.

https(https是http的安全版).

HTTPS使用SSL协议(TLS是更为安全的升级版 SSL,本质上就是SSL)来保障信息的安全(确保信息发送到正确的客户端和服务器、加密数据,防止信息在传输过程中被窃取,维护数据的完整性、确保数据在传输过程中不被改变)

省略了端口,省略端口的时候,浏览器会默认提供端口,对于http来说,默认端口是80,对于https来说,默认端口是443

最后面的 '/' 也是路径.没省略只是有点短,代表根目录(是http服务器的根目录)

当在浏览器中输入URL后敲下回车,浏览器会对输入的信息进行以下判断:

1)检查输入的内容是不是一个合法的URL链接还是一个待搜素的关键词

2)如果是合法的URL链接,判断输入的URL是不是一个完整的URL,如果不是,浏览器就会自己猜测,然后补全这个URL.

3)如果是一个待搜索的关键词,浏览器就会根据用户设置的默认搜索引擎来进行搜索.

🐇二、域名查询(DNS解析)

浏览器开始查找域名对应的IP地址.

请求发起后,浏览器会解析这个域名(www.baidu.com)

整体流程图:

1)首先,它会查看本地硬盘的hosts文件,hosts文件默认路径如下:

 (这个hosts文件像hash表一样,建立了域名和IP的映射关系.

现在打开基本上都是空的)

(早期的时候,互联网上服务器寥寥无几,每个用户手动维护自己的hosts文件就够用了,但是后来互联网蓬勃发展,现在网站成千上万,每天都有新网站诞生,旧网站消亡,此时手动维护已经不靠谱了)

看看hosts文件其中有没有和这个域名对应的IP,如果有的话,直接使用这个hosts文件里的IP地址.

2)如果在本地的hosts文件里面没有找到这个域名对应的IP地址,此时浏览器就会发送一个DNS请求到本地DNS服务器.

(本地DNS服务器一般都是由网络接入服务器商提供(中国移动 中国电信....))

查询输入网址的DNS请求到达本地DNS服务器以后,本地DNS服务器首先会查询它的缓存记录,看看缓存记录中有没有这条记录,如果有就直接返回.

3)本地DNS服务器的缓存记录没有这条记录,此时本地DNS服务器向根DNS服务器进行查询.

根DNS服务器没有记录具体的IP地址和域名的对应关系,根DNS服务器给出一个顶级域DNS服务器(.com 域服务器)的地址,让本地DNS服务器到顶级域DNS服务器上查询.

这里补充一下DNS服务器的种类:

自高到低分为4个级别:根DNS服务器、顶级域DNS服务器、权威DNS服务器和本地DNS服务器。

4)本地DNS服务器向顶级域DNS服务器(.com域服务器)进行查询.

顶级域DNS服务器中也没有记录具体的IP地址和域名的对应关系.顶级域DNS服务器给出一个权威DNS服务器(www.baidu.com 域服务器)的地址,让本地DNS服务器到这个权威DNS服务器上进行查询.

5)本地DNS服务器向权威DNS服务器(www.baidu.com 域服务器)进行查询.

这时本地DNS服务器就会收到一个域名和IP地址的对应关系,本地DNS服务器就会将IP地址返回给浏览器,并将这个对应关系保存到缓存记录中,以便于下次进行查询时,可以直接返回结果,加快网络访问.

🐇三、建立TCP连接

HTTP是浏览器和服务器之间的桥梁,HTTP往往是基于传输层的TCP协议实现的,所以说,要先建立TCP连接,当浏览器获取到服务器的IP地址后,会用一个随机端口号(1024 -> 65535) 向服务器80端口发起TCP的连接请求,当这个请求到达服务器端后,就会进行TCP的三次握手来建立连接.

博主之前写过详细的三次握手,博客链接如下:

(2条消息) TCP报文详解_程序猿小马的博客-CSDN博客

🐇四、发送HTTP/HTTPS请求

当TCP连接建立好以后,浏览器向服务器发送HTTP请求.(一般是一个html文件)

🐇五、服务器响应请求

当服务器收到这个HTTP请求以后,服务器解析这个请求,然后返回一个HTTP响应报文(包括相关的响应头和html正文)

🐇六、浏览器解析渲染页面

浏览器解析资源并布局渲染.主要步骤有三步:

1)对于获取到的 HTML CSS JS 图片等资源,浏览器通过解析HTML生成DOM树.

2)浏览器解析CSS,生成CSS 对象模型(CSSOM).

3)将DOM树和CSSOM树合成一棵渲染树.

4)根据渲染树进行布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息,然后将各个节点渲染到屏幕上.

🐇七、断开TCP连接

断开TCP连接的过程是四次挥手,博主之前的博客有过介绍(和三次握手的博客链接一致)

(2条消息) TCP报文详解_程序猿小马的博客-CSDN博客

以上就是 "从输入URL到展示出页面"这个过程.(如果有地方写的不足,还请UU们可以指出)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识树中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛一个老生常谈的面试问题: > 从输入 URL页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识树中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛一个老生常谈的面试问题: > 从输入 URL页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值