前言
如果你们问我今年春招面试的时候有没有印象深刻的面试题,那么我肯定会跟你说这一题——你知道访问一个网站的完整流程吗?你知道在浏览器输入网址后发生了什么,涉及到网络中的哪些协议?
这道题往往是面试官很喜欢问的问题,因为它包含的知识很全,如果你没有一个很好的计算机网络知识体系,那么这道题对你来说可能有些难度
那么我们如何解答这个问题,首先我们来看一下脑图

在现实生活中,我们每天都会上网,访问各种网址(你懂的)
那么你知道当你打开浏览器之后输入一个网址,然后在很短的时间内给你返回一个网页内容的这个过程里面究竟发生了什么?
URL解析
首先浏览器会根据你输入的网址(也就是URL)进行验证,看看是否合法,如果不合法,那么久就会把你输入的内容传给默认的搜索引擎、
如果通过验证,那么就会解析得出协议,域名,资源。
比如说当我们输入 www.csdn.net,浏览器会给你补全是 http 协议或 https 协议

其中协议(https),域名(www.csdn.net)就被解析出来了
DNS查询
在知道了域名是什么之后,浏览器会进行DNS解析,用来获得域名所对应的IP地址
首先会检查域名信息是否在本地缓存中
查找本地缓存顺序大致如下:
- 浏览器缓存,例如cookie
- 系统缓存
- 路由器缓存
- ISP DNS缓存
如果缓存没有的话会查看域名信息是否在本地的 hosts 文件中
如果还不在,那么浏览器会向本地域名服务器发送查询请求,以便获得目标服务器的IP地址,这个查询往往是采用递归查询
如果本地域名服务器也没有,那么本地域名服务器就会代替浏览器去向根域名服务器,顶级域名服务器等去发送查询请求,这个查询往往采用的是迭代查询
然后获得要访问服务器(目标服务器)的IP地址
TCP连接
在知道目标服务器的IP地址后,浏览器会调用库函数socket,生成一个TCP流套接字,也就是完成了TCP封包
接着进行TCP三次握手:“你瞅啥”——“瞅你咋地”——“过来咱俩唠唠”,完成了这一系列操作之后,浏览器就和目标服务器完成了TCP三次握手并成功建立连接

tcp三次握手过程
HTTP连接
成功建立连接之后,我们的浏览器发送http请求报文,去请求服务器资源
http有很多请求方法:
- GET
- POST
- PUT
- DELETE
这里我们用的是GET方法,去获取服务器的相关资源
服务器收到请求报文之后对其进行响应:根据请求信息获得相应的响应内容。
例如我们输入的是 www.csdn.net 意味着请求访问首页文件
服务器将响应报文发送给浏览器后,浏览器就获得了响应的网络资源
浏览器解析并渲染
浏览器获得想要访问的资源之后(大多数情况下资源是HTML页面)
浏览器首先对HTML文件进行解析,生成解析树(以DOM元素为节点的树)
例如我们的HTML文件是这样的:

解析之后:

得到解析树之后便加载页面的其他资源,例如JS,CSS,图片等
遍历解析树,并计算每个节点的样式,变成我们看到的页面。
这次请求响应之后,就这样完成了一次HTTP请求。
关闭连接
在完成了一次http请求之后,会根据实际情况看是否关闭连接(设置是长连接还是短连接)
最后进行TCP四次挥手关闭连接

本文详细介绍了从输入网址到展示网页的全过程,包括URL解析、DNS查询、TCP连接、HTTP请求及响应、浏览器渲染和关闭连接。通过DNS递归和迭代查询找到服务器IP,TCP三次握手建立连接,HTTP GET请求获取资源,最后浏览器解析渲染页面,完成一次HTTP请求。

734

被折叠的 条评论
为什么被折叠?



