首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打开一个网页背后都发生了什么?

打开一个网页背后都发生了什么?

作者头像
谭小谭
发布2019-06-03 09:57:10
1.4K0
发布2019-06-03 09:57:10
举报
文章被收录于专栏:谭小谭谭小谭

这是一个老生常谈的话题,我今天还是想凭我自己的理解,用自己的话来捋一捋这个过程。

对于我们用户来说,只需要在浏览器中输入或者点开一个 url ,我们就直接可以看到网页内容了,但是这背后却经历非常复杂的故事,简单来说主要有下面四大过程:

1、浏览器根据域名找到对应的 ip 地址(远程服务器)。 2、浏览器与远程服务器建立连接(tcp 连接,三次握手)。 3、浏览器与远程服务器发送和接收数据。 4、浏览器与远程服务器断开连接。

接下来我们再来详细解释一遍。

1、域名解析为ip

ip 即为网络为每一台电脑分配的一个地址,你可以简单的理解为一个门牌号,要想找到某台电脑,就需要先知道它的 ip 地址。由于 ip 地址不方便被记住等原因,于是有了域名,理论上一个域名对应一个 ip。浏览器拿到域名后,第一件事就是要把域名解析成 ip,然后找到这个 ip 对应的机器。

通常使用 DNS 解析来帮域名找到对应 ip 地址,为了让这个查找过程更高效,浏览器和操作系统都会将每次的解析结果缓存起来。

即下次再要解析某个域名时,就会先去缓存里去看下,如果缓存里没有对应数据,就再去根域名服务器、顶级域名服务器等查找 ip。

总之在这一过程中,不管用什么样的方式,最终都是为了把域名解析为 ip 地址。

2、建立连接

既然已经了对方的 ip 后,那就要开始建立连接了。由于 http 是基于 tcp 协议的,tcp 建立连接需要经历三次握手。下面模拟一下三次握手的过程:

浏览器A:你好,我是浏览器A,我想找你玩儿。 远程服务器B:你好啊,浏览器A,那你来吧。 浏览器A:好的嘞,我这就去了。

这就是三次握手的大致流程,tcp 的三次握手确保了每一个消息都有去有回。一旦某个消息得不到有效回应 tcp 协议就会重发该消息,直到得到有效回应。

tcp 属于传输层,其实传输层还有一种 udp 协议,udp 和 tcp 最大的区别就是不需要建立连接,也就是说 udp 无需像 tcp 通过三次握手建立连接才能开始通信,udp 发出包也不用确保能否得到有效响应,只管发出去就行了。udp 协议通常被用于对实时性要求性比较高的场景,比如直播等。

3、服务器响应和返回

建立连接后,就可以互相传送数据了。浏览器按照 http 协议的格式将数据组装好向服务器发起请求,服务器接收到请求并将处理结果响应给浏览器。

服务端的 http 服务器软件一般有 Apache 和 Nginx,Apache 或 Nginx 又将请求交由具体的编程语言(Java、Python、PHP 等)去处理。

服务器又将程序处理的结果按照 http 协议格式原路返回给客户端浏览器,浏览器则再根据返回的数据渲染页面和数据。

4、断开连接

在完成了数据通信之后,就要考虑断开连接了,毕竟任务完成了就要空出系统资源来。tcp 的断开相对于连接来说,其实是有四次握手的,通常被称作四次挥手,就是挥手拜拜了。

浏览器A:你好,时间不早了,我想回去了。 远程服务器B:哦哦,我看下几点了啊。 远程服务器B:哎呀,确实不早了,那你先回吧,拜拜。 浏览器A:好的,拜拜。

在这里你可能会问,为什么断开连接不能像建立连接一样只需三次挥手呢,即浏览器在告诉远程服务器想要断开的时候,服务器干嘛不直接断开呢?

因为服务器在收到断开消息的时候,可能还有任务或数据没有处理完成,在这个时候服务器会再去确认是否所有数据都处理完毕了,如果确实都处理完成了,服务器再告诉浏览器可以断开了。

好了,浏览器打开一个网页背后差不多就是这些流程了,但其实每一个过程都非常复杂。

比如 DNS 解析,是怎么去查缓存的,如果没有缓存又是怎么样去根域名服务器查询的,全球那么多的域名都会去根域名服务器查询 ip 吗,根域名服务器又是怎么应对这种超高并发的请求呢?

本文中讲的都是基于 http 的,对一些安全性要求比较高的比如支付等业务我们通常会使用 https, 那么 http 和 https 究竟是有啥区别呢,https 加密方式是怎样的一个原理?

关于这些问题,后面我会再单独详细讲,欢迎关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谭小谭 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档