哈喽,大家好,我是Fine。今天分享一篇经典面试题,让你说一说从浏览器地址栏输入url回车之后的从解析URL到渲染完页面的整个过程,尽可能详细。有兴趣的同学不妨自己试一试回答一下。
以下是正文:
最近面试,总有不同的公司问我有关http的问题,虽然说或多或少都能答上来一些,但看着面试官淡漠的眼神就知道这题完蛋🥲。所以这两天也搜罗了一些文章或是视频来补充自己对这方面的理解。在这写成一篇笔记吧,以便记忆以及总结巩固。
当我们在搜索框手动输入 www.baidu.com 时,浏览器到底是做了什么呢? 首先就是 DNS解析。
DNS 解析是一个分布式数据库系统,为了将域名,例如baidu.com,转换为对应的IP地址。
前面的www就是一个约定俗成的习惯,用于指代网站的主服务器,通常被用作一个域名的一部分,这里不需要过多关注。
那么为什么需要域名呢?其实完全只是为了好记罢了,毕竟作为一个这么有排面的公司,无论是从知名度还是简便性考虑,这都比一串ip地址要很得多。
DNS解析的过程是这样的。
这样才是和我们直接输入ip地址是一样的。只要将上面的图示理解清楚,那对应的DNS解析的题也就手到擒来。
客户端需要和服务端先建立连接,就要提到 TCP协议了。三次握手,大家应该都很清楚了,这也是我第一次被问到的这类问题,我回忆起来,答的应该还行。
有一种情况,客户端向服务端发送第一个连接请求A,但是A因为某种非人为原因到达不了服务端,此时因为TCP协议内定的超时重传机制,客户端将会再一次发送请求,这里称为B。后面一切正常,客户端也接收到了服务端发来的数据,然后自然而然的关闭连接。这时候丢失的连接请求A又到达了服务端,服务端也就处于连接状态,等待客户端的数据请求,但是此时客户端并不知道之前发送的连接请求到达了服务端,所以始终处于关闭连接状态,这样服务端就会一直处于等待状态,浪费性能。
所以第一次的握手就是让服务端明白自己拥有接收请求的能力,然后服务端发送第二次握手,如果客户端成功接收到后,就明白自己能够发送请求,毕竟自己都接收到了对方的答复,也代表能接收请求。但是这样服务端并不知道自己的第二次握手对方有没有接收到,所以客户端需要发送第三次握手,等到服务端成功接收到后,就代表双方都拥有发送和接收请求的能力。
做完连接,就可以开始正式的 HTTP数据传输了。其实要说的话,建立连接的时候也就可以传输数据了,只是很小而已。
数据传输用到的是 HTTP协议,TCP协议是专门用来建立连接用的。下面就介绍一下HTTP的历史版本,里面也有一些常考的题。
HTTP协议是超文本传输协议,一开始被打造是用来实验室传输html文本。
请求行采用 GET 方法,后跟一个空格,接着是资源的路径。GET /index.html
传输的 HTML 文件是以 ASCII 编码的纯文本文件,不支持二进制数据传输。
0.9 的问题:多种类型的资源文件需要被传输。
所以增加 请求头、响应头 -- 实现客户端和服务端的交流。
请求头:
响应头:
HTTP 状态码用于表示服务器响应的状态。常见的状态码有这些:
2xx 成功:
3xx 重定向:
4xx 客户端错误:
5xx 服务器错误:
这样的一些状态码只有多记了,一般的话一些常见的报错看多了也就自然而然的记住了。
1.0 的问题:HTTP的短连接。
1.1 建立了长连接,也叫持久连接。 在1.0版本中,每次客户端向服务端请求数据都需要经历三次挥手、发送请求、接收响应、四次挥手这几个步骤,也不是说这些步骤不重要,只是当浏览器先请求html,接着又需要css,这样一次次的建立连接,断开连接是很浪费时间的。
虽然允许同时建立最多六个TCP连接,每个连接又可以有多个 http请求,但是并不能同时发送请求,而是需要等待上一次的请求和响应都到位后,接着才可以发送下一次的请求。这也被称为 http队头阻塞,也几乎是这方面必考的题。
在1.0的版本中还允许对虚拟机的支持。每台物理设备都有对应的ip,但是虚拟机呢?是也有对应的ip吗? 看个例子吧。
假设有一台物理服务器,IP 地址为 192.168.1.100
,并设置了桥接模式的虚拟机网络配置:
虚拟机 A:
192.168.1.100
example.com
虚拟机 B:
192.168.1.100
anotherexample.com
访问过程
1.用户访问:
example.com
。example.com
的 IP 地址。192.168.1.100
。2.HTTP 请求:
192.168.1.100
发送 HTTP 请求。Host
字段包含 example.com
。3.服务器处理:
Host
字段中的域名 example.com
将请求路由到虚拟机 A。正是为了处理虚拟机这种复杂的 ip地址关系,请求头中增加了新的字段 HOST。再提一句,cookie 也是在这个版本中新加的。
1.1 的问题:带宽的利用率低。
在这个版本中,引入了许多新特性来提高网络性能,其中包括头部压缩。用于减少请求和响应头部的大小,从而提高网络传输效率。
使用 HPACK 算法来压缩请求和响应头部,它结合了静态压缩表和动态压缩表来实现高效压缩。压缩后可以减少带宽使用、加快响应时间、减少往返次数。
HTTPS和 HTTP的差别,应该都可以说出来 HTTPS 是加密用的,但是具体是怎么回事呢,在这里看看吧。
TLS协议
HTTP + TLS = HTTPS
介绍这个最新版本前,先来说一下 UDP 协议。
UDP 和 TCP 的区别:
TCP:
UDP:
2.0 的问题:
QUIC协议 = TCP + UDP
到这里 HTTP协议的一些历史版本就介绍结束了。
这里的2MSL是一段时间,这段时间是数据包能够存活的有效时长,确保服务端接收到确认应答,因为有可能服务端因为网络问题而没有接收到确认应答,而一直处于等待状态。
后面就是拿到html、css等数据来到浏览器渲染,也就涉及 DOM树、OM树、RENDER树,页面排版之类的了,这里不继续絮叨。
本文转自 https://juejin.cn/post/7404780384544833551
如有侵权,请联系删除。
欢迎大家访问我们的刷题网站(https://fe.ecool.fun/)或者小程序 前端面试题宝典 进行刷题,1200多道全网最全的前端面试题,让你一网打尽。近期还有会员卡免费领,全场打折的活动不容错过!刷题会员周卡免费送
有会员购买、辅导咨询的小伙伴,可以通过下面的二维码,联系我们的小助手。