幕后:在浏览器中输入 URL 时会发生什么?什么是网站?URL 的剖析 DNS HTTP

2025-05-28

屏幕背后:在浏览器中输入 URL 时会发生什么

什么是网站?

URL 的剖析

DNS

HTTP

最初Ayesha Alvi在Educative.io上发布

根据Statista的数据,全球超过一半的人口是活跃的互联网用户。我们几乎一切都依赖互联网:查看电子邮件、叫Uber、订购食物和衣服。虽然我们大多数人都依赖互联网,但大多数人却不了解“屏幕背后”发生的事情。

这篇文章将让你了解当你在浏览器中输入 URL 时会发生什么——这个过程不仅与你日常互动,而且很大程度上也依赖于它。

从根本上来说,这个过程可以分解为几个步骤。我们将以任何人都能理解的方式讨论每个步骤的技术细节。

如果您想超越本文的范围,深入了解网络基础知识,可以访问“软件工程师计算机网络入门”并查看免费预览。这门课程将对那些刚刚开始软件开发职业生涯的人士有所帮助。如果您已经是一名软件工程师,那么更深入的网络知识将有助于您从那些认为网络“理所当然”的工程师中脱颖而出。

让我们开始吧!


什么是网站?

所有网站都是文件。一个基本的网站只是一个 HTML 文件,然而,如今大多数网站都包含多个相互链接的文件,其中包括 JavaScript 和 CSS。

网站运行在功能强大的计算机上,这些计算机被称为服务器。服务器通常位于远离您计算机的地方。为了在您的浏览器上显示网站,浏览器必须从服务器获取信息。因此,每个服务器都有一个可供访问的地址,称为IP 地址

从服务器检索网站很像从仓库检索货物。仓库类似于服务器,因为它位于远程,拥有地址(就像服务器拥有 IP 地址一样),并且存储货物(就像服务器存储或托管网站一样)。

替代文本

IP 地址表示为四个介于 0 到 255 之间的数字,每个数字之间用点分隔。以下是 IP 地址的示例:

203.128.22.10

无论是否是服务器,所有连接到互联网的设备都有一个 IP 地址。您的计算机也有一个 IP 地址。查找计算机 IP 地址最简单的方法是访问https://www.whatsmyip.org/。请注意,所有支持互联网的设备都有 IP 地址,但并非所有设备都是服务器。

如果你的浏览器知道某个网站所在服务器的 IP 地址,它就能访问该网站。然而,它只知道 URL。

URL 的剖析

URL (统一资源定位符)用于定位资源,在我们的例子中,指的是服务器上的网站。请求的资源可以是任何类型的文件,例如 MP3 文件、图像或 cpp 文件。URL 会告诉浏览器两件事

  1. 域名:用于标识网站的唯一名称。例如 facebook.com、educative.io 和 google.com。域名指定资源/网站所在的服务器。

  2. 文件路径:服务器上的文件有一个位置,就像您的 PC 有文件系统一样,每个文件都有一个位置。URL 还指明了所请求的指定资源在服务器上的位置。服务器上的文件或资源的位置由 URL 指定。

替代文本

假设你在浏览器中输入一个类似上面的 URL。在这种情况下,course.php请求的资源位于allcourses服务器上域名为 的文件夹中educative.io

你可能想知道为什么要使用 URL。为什么不直接在浏览器中输入 IP 地址呢?

嗯,这有很多原因。首先,人类通常不太擅长记忆随机数。想象一下,在 www 上记住 73.22.49.2.Facebook.com。对于一个网站来说这很容易,但想象一下,如果你一天访问的所有网站都这样,你最终可能会把IP地址写在某个地方!所以URL只是实用而已。其次,托管网站的服务器可能会随着时间的推移而变化,这意味着IP地址也会随之变化。跟踪这些变化对用户来说并不实际。

DNS

那么,浏览器如何根据提供的 URL 推断出 IP 地址呢?这就要用到互联网的目录服务——域名系统 (DNS )。DNS 用于根据域名查找IP 地址。

这些域名到 IP 地址的映射称为DNS 记录

替代文本

这些 DNS 记录是分布式数据库的一部分,这意味着所有记录并不存储在任何一个服务器上,而是分布多个服务器之间。

由于全网络密集解析会减慢解析速度,因此检查映射是否已知比过早进行映射更有效。这需要多个步骤。首先,检查浏览器的本地缓存。如果没有记录,则检查操作系统的缓存。如果操作系统的缓存中也没有记录,则检查路由器的缓存。最后,将查询发送到 ISP(互联网服务提供商),让其检查缓存。

DNS 服务器被划分为多个区域,形成层级结构。位于最顶层的服务器称为“根服务器”,它们存储其他 DNS 服务器(称为顶级域名服务器)的 IP 地址。顶级域名 (TLD) 服务器按类型划分,例如 、.com.edu。TLD 服务器具有到“二级域名”服务器的映射,例如 wikipedia.com 和 educative.io 的服务器。这些 DNS 服务器包含到实际托管相应域名的服务器的映射。

替代文本

因此,如果在本地找不到该记录,则将按如下方式进行完整的 DNS 解析:

  1. 全面解析的第一个联系点是根服务器。截至撰写本文时,已有 1017 个根服务器实例。访问https://root-servers.org/了解更多详情和交互式地图!

  2. 根服务器返回相关顶级域名服务器的IP地址。

  3. 顶级域名返回二级域名服务器的IP地址。

  4. 二级域名服务器里面有我们要找的服务器的DNS记录,二级域名服务器返回IP地址给浏览器。

一个很好的理解方式是,域名是反向解析的:

替代文本

  1. 你可以想象 URL 后面有一个点,它代表根服务器。根服务器返回的是顶级域名服务器的地址,在本例中指的是 io 服务器。

  2. 然后,io 服务器将地址返回给知道 Educative 服务器地址的 DNS 服务器。

  3. Educative DNS 服务器将地址返回给 Educative 服务器。

替代文本

现在浏览器知道了服务器的 IP 地址,它就可以向其发送请求。

HTTP

这些请求遵循一种名为超文本传输​​协议 (HTTP) 的“协议”或“通信规则” 。该协议规定了消息的格式、发送消息的时间、适当的响应以及如何解释消息。HTTP 消息有两种类型:请求响应

HTTP请求消息由请求行标头组成。该消息以 请求行 开头,后跟标头。以下是一个示例 HTTP 请求:

GET /path/to/file/index.html HTTP/1.1

Host: www.educative.io

Connection: close

User-agent: Mozilla/5.0

Accept-language: fr

Accept: text/html
Enter fullscreen mode Exit fullscreen mode

请求行由请求方法路径HTTP 版本GET组成。上例中的请求方法指示服务器执行的操作。GET例如,指示服务器客户端想要检索指定路径下的资源。其他请求方法示例包括DELETE:指示服务器删除指定路径下的资源;以及PUT指示服务器将指定的资源放置在指定路径下。此外,还指定了 HTTP 版本,以适应每种方法之间的差异。

接下来是 HTTP标头。标头允许客户端传递额外的信息,例如服务器类型和日期。每个标头占一行,由名称、冒号和标头的值组成。标头有很多种。例如,connection标头指示它是否是 HTTP 连接类型。如果您想更详细地了解标头,可以访问《面向软件工程师的计算机网络入门》

然后,服务器发送 HTTP响应消息。以下是响应消息示例:

HTTP/1.1 200 OK

Connection: close

Date: Tue, 18 Aug 2015 15: 44 : 04 GMT

Server: Apache/2.2.3 (CentOS)

Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT 

Content-Length: 6821

Content-Type: text/html

[The object/file that was requested]
Enter fullscreen mode Exit fullscreen mode

响应消息以状态行开始,后跟多个标题,再后跟一个空白行,如果请求了资源则以资源结尾。

状态行由HTTP 版本号状态码组成。状态码有几种类型。你熟悉那些烦人的 吗404 Not Found

嗯,这是一个 HTTP 状态代码!以下是基本列表及其含义:

  1. 200 OK:请求成功,结果附加在响应消息中。

  2. 404 文件未找到:请求的对象在服务器上不存在。

  3. 400 错误请求:通用错误代码,表示请求的格式服务器无法理解。

  4. 500 HTTP 内部服务器错误:由于服务器遇到一些意外错误,请求无法完成。

  5. 505 HTTP 版本不受支持:服务器不支持所请求的 HTTP 版本。

接下来,浏览器接收响应,对其进行解释,并向用户显示相应的内容。例如,如果返回的是 HTML 页面,浏览器会对其进行解释并显示相应的内容。

然而,如今大多数网站并非由简单的 HTML 构成。这种情况过于简化,实际发生的情况非常罕见。现实世界中的网站通常包含其他资源,例如图像,这些资源是通过后续的 HTTP 请求从服务器请求的。

您想要了解更多有关网络知识的原因有很多。

如果你想从事软件开发工作,这些知识将非常宝贵。如果你已经是一名软件工程师,那么更深入的网络知识将帮助你从那些认为网络“理所当然”的工程师中脱颖而出。

此外,网络安全是一门非常令人兴奋的学科。除了研究之外,道德黑客和渗透测试也是网络安全领域可行的职业发展方向。然而,如果没有扎实的网络基础,就无法学习或完全理解网络安全。

Educative 最近推出了一门课程,即“软件工程师理解计算机网络”,该课程将帮助您学习网络的最重要方面。

学习愉快!

文章来源:https://dev.to/educative/behind-the-screens-what-happens-when-you-type-a-url-in-a-browser-161d
PREV
2020 年学习现代 React
NEXT
为什么要使用 NextJS?