在浏览器中输入一个url发生了什么?

有这样一个经典的面试题:
在浏览器中输入一个url(例如:www.baidu.com),然后回车,这期间都经历了什么?

请暂停下来,不要继续看。闭上眼思考一下答案。
首先我们普及一些基本概念。

1.DNS,一般指域名系统,提供将域名转换为对应IP的服务。
2.IP,网际互连协议。通常用它指计算机的地址,有ip就能找到对应的服务器。
3.Port,端口,服务器提供服务需要监听指定端口,如果有人访问该端口,那么服务器会处理请求,返回响应。
4.http,超文本传输协议,网络传输内容的协议。https就是http+ssl。
5.html,超文本标记语言。css,层叠样式表。js,网站编程语言。这三个语言配合,可以确定界面最终展示的是什么样子。

在浏览器中输入url(www.baidu.com),先还原一下这个请求,在实际发起请求时,url是这个样子的(http://www.baidu.com:80/

http是请求协议,中间是域名www.baidu.com,分号后面紧跟着的是端口,最后的/指请求服务器根目录的接口。

所以一个请求地址含义如下:

协议://域名或IP:端口/接口地址

为什么我们只输入域名www.baidu.com,就可以访问呢,是因为浏览器输入地址后,如果不指定协议,会自己附加http,端口也会默认是80.

知道这个以后,那么回车,浏览器拿到域名并不能找到服务器在哪,需要经过请求DNS,将域名转为IP地址。然后拿着IP去通过路由器转发请求,这期间可能经过多个路由器或者网关,最终找到服务器。

找到服务器后,服务器本身又有65535个端口,相当于有这么多扇门,那么从哪个门进去,这个之后就需要浏览器附加的80端口了,找到这个ip地址的服务器,从80端口进去,进去以后带着/找到对应接待的人,这个人说给你这个文本你回去吧。

然后服务器给浏览器返回了一个html格式的文本。浏览器根据html,以及文件附带的css和js将页面渲染出来。

总结一下:

输入域名
->浏览器偷偷加上协议http和端口80
->请求DNS服务,将域名转为IP
->根据IP通过路由找到服务器
->根据端口80进入到服务器
->说我要/下的东西
->服务器经过处理,将首页html返回给浏览器
->浏览器根据html语言语法规则,将页面渲染出来。

这个过程省略了很多细节,包括浏览器域名转IP的时候,会先看浏览器缓存是不是已经有转换过的值了,然后看本机hosts文件和缓存,如果前面都没能把域名转为ip才会去请求DNS,这也是我们上网为什么要配置DNS(8.8.8.8)

拿着IP去找服务器的过程其实也更加复杂。
会先计算此IP是否属于当前局域网,属于当前局域网直接找。
不属于就将请求转发到网关也就是我们常用的路由器,路由器将ip路由到合适的交换机或者路由器,直到找到服务器。
这里会涉及到mac地址,icmp协议,路由协议,网段等计算机网络知识。

找到服务器,并进入端口后,谁在提供服务?可能是一个nginx,也可能是一个Go语言程序,或者是springboot程序。这里是服务实现的不同。

那么在页面展示上也有所不同。前后端分离,是先把页面结构html发到浏览器,然后js代码再请求服务器获取json数据渲染到页面上。前后端不分离则是计算机把数据准备好,并且嵌入到html中,才发送到浏览器。

深入的挖掘,会发现简单的背后会隐藏很多细节,那么你理解不透彻,自然就俘获不了面试官的青睐。

当然这个问题说开来,你还可以回答分布式的知识,比如请求到了服务器,最前面是一个api-gateway,先做了权限校验,是否是恶意请求,是否是爬虫,是否是DDOS攻击,检测没问题,通过服务注册中心将请求转发到真正的服务上去响应。

当然,装逼还是需要自身水平过硬,一个知识点不清楚,还是不要拿出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值