原文: What happens when you click on a URL in your browser

在这篇文章中,我希望给读者建立一个网络世界的基本印象。我之前的文章都是互联网相关更高阶的内容,如:Angular 之旅React 基础等。但在今天这篇文章中,我想带领各位读者一起领略点击 URL 之后的风光。

正如文章标题所示 - 当你点击 URL 之后会发生什么?——让我们开始吧!

在探讨点击 URL 之后,我们得先了解 URL 是什么,它的各个组成部分,对不对?那么别浪费时间了,让我们开始了解 URL 吧!

URL – 统一资源定位符(Uniform Resource Locator)

正如 URL 的全称所述:它表示了我们想要访问的资源的地址。它相当于一个物理世界的地址,而在这个地址有你想要交互或者搜寻的信息。

在你的日常生活中,如果你出于工作或者讯息需求想要拜访一位朋友,你首先需要他/她的住址。在网络世界也是如此,你想要访问的网站必须有一个地址。网站就相当于朋友的房子,而 URL 就是房子的地址

剖析 URL

现在我们已经清楚了 URL 是什么,但还不了解它的组成部分,让我开始吧!

看看这个例子:

https://www.example.com/page1

在示例中,第一个部分是 ‘https’,它告诉浏览器应该使用哪种协议。协议可以是 http、https、ftp 等。协议是浏览器用于网络通信的一组规则'https' 是安全版本,信息以一种安全的方式交换。

第二部分 www.example.com域名。你可以把它当作你朋友的房子。域名是网站的地址。我们使用域名来访问服务器(训练后的电脑),服务器的任务是给网站提供信息。稍等!我刚刚才说过 URL 是地址,现在又说域名也是地址。可别搞混了!

URL 和域名之间的区别

两者之间最大的不同是 URL 是完整的地址。 URL 提供了信息交流的方法以及登录网站之后的路径。而域名是 URL 的一部分

让我们通过之前的示例来了解。你可以认为你朋友的住址是域名,同时 URL 不仅告知了朋友房子的住址(域名),以及你们交流的方式,如去到一个单独的房间(安全)或者当着所有人的面(信息可能会泄漏)。它也告知了路径,即到达房子之后,你应该去哪个房间。因此,域名是 URL 的一部分。一个包含域名和更多信息的地址才是 URL。

希望现在你更清楚 URL 是什么了,让我们进入下一个部分。

域名

上文我介绍了域名,但未做深入讨论。现在就来看看,域名是网站的地址。它是浩瀚网络世界中网站唯一标识。不能有两个相同的域名,但是 - 对!还有一个“但是”。 域名之间不仅仅是通过这个来区别的,还有其他的内容。

当点击 URL,也就是域名之后,网站被打开,内容呈现出来。每一台计算机都有 IP 地址,用来在互联网通信。正如它的名字“IP 地址”所述,它就是一个地址。当我们点击任意URL时,我们实际上是在 点击 负责提供网站内容(托管)的电脑的 IP 地址

现在你可能会觉得,什么鬼!所有东西都是地址?有 IP 地址的话,还要域名干嘛?为什么不直接用 IP 地址获取内容?

是的!你可以使用 IP 地址获取内容,但你真的记得住所有网站对应的 IP 地址吗?显然不行!记住每一个网站的 IP 地址太难了,域名才应运而生。

你可以类比通讯录。你记不住每一个人的手机号码,但是你可以记住他们的名字。域名和 IP 地址的关系也同样。你可记不住这些吓死人的 IP 地址,但是你可以轻松记住域名

大量的数据由数据库维护,并且存储在域名下这个 IP 地址内。存储域名和对应 IP 地址的系统被称为 DNS(域名系统) 。(我相信你肯定听说过)

基础介绍得差不多了,让我们进入点击 URL 之后的步骤。

DNS lookup 查找 IP 地址

访问 URL 之后,首先要做的是解析与域名相关联的 IP 地址。DNS 辅助这个工作。DNS 就像电话簿一样,给我们提供与域名关联的 IP 地址,就如同我电话簿提供和人名相关的手机号码一样。

dns

这是概述,但此域名查询通过四层,分以下几个步骤 :

1. 点击 URL 之后,将检查浏览器缓存。因为浏览器会在一段时间内存储你访问过的网站的 DNS 记录,DNS 查询会先查缓存里的与域名关联的 IP 地址。

2. DNS 查询检查的第二个位置是系统缓存,其次是路由缓存

3. 如果在上述步骤中,DNS 查询未得到解析,则需要解析服务器的帮助。解析器服务器只不过是 ISP(Internet 服务提供商)。查询被发送到 ISP,DNS 查询在 ISP 缓存中运行。

4. 如果在第 3 步中也没有找到结果,则将请求发送到 DNS 层级结构的顶层或者根服务器。从来没有发生过在这个阶段没有找到结果的情况,实际上,这部分告诉你可以从那儿找到信息。如果你正在搜索顶级域(.com、.net、.Gov、.org)的 IP 地址,就是告诉解析器服务器搜索 TLD 服务器(顶级域)。

5. 现在,解析器要求 TLD 服务器提供域名的 IP 地址。 TLD 存储域名的地址信息。它告诉解析器向权威性域名服务器询问。

6. 权威性域名服务器负责了解域名的所有信息。最终,解析器(ISP)获取与域名相关联的 IP 地址,并将其发送回浏览器。

获取 IP 地址后,解析器将其存储在缓存中,这样下次如果出现相同的查询,就不必再次执行所有这些步骤。它可以从缓存得到 IP 地址。

这就是解析与域名关联的 IP 地址所遵循的所有步骤。可以结合下图理解:

dns_resolve

由浏览器发起的与服务器的 TCP 连接

一旦计算机的IP 地址(网站信息存储的地方)被发现,就会启动连接。网络通信遵循互联网协议TCP/IP 就是最常见的协议。浏览器和服务器之间的通讯遵循 ‘TCP 三次握手’。让我们简短地了解一下这个过程:

1. 客户端计算机发送一个SYN 消息,确认另一台计算机是否可以建立连接。

2. 之后来到另一台计算机,如果可以建立新的连接,会同时发送 SYN 消息和 确认消息

3. 在此之后,第一台计算机接收到它的消息,并通过发送 ACK 消息进行确认。

可以通过下图理解:

process

通信开始(请求响应过程)

最终客户端和服务器之间的连接建立,双方可以相互交流信息。连接成功之后,浏览器(客户端)服务器发送请求,告诉服务器需要什么内容。服务器知道应该对每一种请求做何种反应。因此服务器响应客户端,响应包含了请求的所有内容,包括网页、状态码、缓存控制等。然后浏览器渲染请求内容。

就这么多,当你点击 URL 之后,上面的所有步骤就运转起来,当然这些步骤可能在一秒之内就完成了。这就回答了“当我们点击 URL 之后,发生了什么?”这个问题。

感谢你阅读本文!