ITPub博客

首页 > 数据库 > 数据库开发技术 > 面试经验分享 | 你知道在浏览器输入网址后发生了什么吗

面试经验分享 | 你知道在浏览器输入网址后发生了什么吗

原创 数据库开发技术 作者:咸鱼运维杂谈 时间:2021-06-11 21:56:00 0 删除 编辑

前言

如果你们问我今年春招面试的时候有没有印象深刻的面试题,那么我肯定会跟你说这一题——你知道访问一个网站的完整流程吗?你知道在浏览器输入网址后发生了什么,涉及到网络中的哪些协议?


这道题往往是面试官很喜欢问的问题,因为它包含的知识很全,如果你没有一个很好的计算机网络知识体系,那么这道题对你来说可能有些难度


那么我们如何解答这个问题,首先我们来看一下脑图



在现实生活中,我们每天都会上网,访问各种网址(你懂的)


那么你知道当你打开浏览器之后输入一个网址,然后在很短的时间内给你返回一个网页内容的这个过程里面究竟发生了什么?


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四次挥手关闭连接


原文作者:咸鱼运维杂谈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
最新的技术文章首先发布在微信公众号:咸鱼运维杂谈 擅长Linux系统维护、开源软件维护、自动化运维等领域,博客主要偏向于学习笔记及经历分享

注册时间:2021-05-29

  • 博文量
    193
  • 访问量
    84237