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

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

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

一、浏览器根据域名找到对应的 ip 地址(远程服务器)。
二、浏览器与远程服务器创建链接(tcp 链接,三次握手)。
三、浏览器与远程服务器发送和接收数据。
四、浏览器与远程服务器断开链接。
复制代码

接下来咱们再来详细解释一遍。浏览器

一、域名解析为ip缓存

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

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

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

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

二、创建链接并发

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

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

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

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

三、服务器响应和返回

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

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

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

四、断开链接

在完成了数据通讯以后,就要考虑断开链接了,毕竟任务完成了就要空出系统资源来。tcp 的断开相对于链接来讲,实际上是有四次握手的,一般被称做四次挥手,就是挥手拜拜了。

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

在这里你可能会问,为何断开链接不能像创建链接同样只需三次挥手呢,即浏览器在告诉远程服务器想要断开的时候,服务器干吗不直接断开呢?

由于服务器在收到断开消息的时候,可能还有任务或数据没有处理完成,在这个时候服务器会再去确认是否全部数据都处理完毕了,若是确实都处理完成了,服务器再告诉浏览器能够断开了。

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

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

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

关于这些问题,后面我会再单独详细讲,欢迎关注。原创文章不易,若是文章对你有一点点帮助或启发,但愿能给文章点一个赞,有问题也欢迎留言与我交流。

相关文章
相关标签/搜索