面向数据科学家的计算机科学课程:Web 的工作原理
本文将有关网络的计算机科学基础概念转化为实用的思维模型,帮助您构建更强大、更高效的数据管道。
还在为调试失败的 API 调用而苦恼,或是被云存储桶缓慢的数据传输速度所困扰,又或是试图理解网站结构以便进行数据抓取?这些常见的数据科学难题往往源于对互联网基本运行机制理解的不足。虽然这些话题看似是 Web 开发人员的专属领域,但对数据如何从 A 点传输到 B 点的核心理解,对于任何数据专业人士来说都是一项强大的工具。为了帮助大家建立这种直觉,本文将哈佛大学 CS50x 2025 课程中关于 Web 编程的核心网络概念进行综合阐述。

1. 互联网并非一条直线
当你的代码从远程服务器请求数据时,很容易想象信息沿着一条直线直接传输。但实际情况要复杂得多。互联网是一个庞大的互联计算机网络,或者说是“路由器”,它们的唯一目的就是传递信息。
把你的数据请求想象成一个“虚拟信封”。你的电脑把它交给最近的路由器,路由器再决定下一个要转发给哪个路由器。这个过程不断重复,信封在服务器之间“跳跃”,直到到达目的地。选择的路径不一定是最短的地理距离。路由器会使用软件来优化路由,以降低速度、服务器负载,甚至出于经济原因,例如将流量限制在特定运营商的网络上以避免费用。如果一次传输需要超过 30 次这样的跳跃,那么它很可能陷入了死循环。
数据科学连接: 对于数据科学家而言,这个概念提供了一个强有力的网络延迟思维模型。当您从 AWS S3 等云服务提取数据或查询远程数据库时,数据在互联网上“跳跃”所需的时间是影响数据管道性能的切实因素。这并非抽象概念,而是会引入您需要考虑的物理延迟。
2. 您的数据将被拆分并重新组装
像高分辨率图像或几GB的数据集这样的大型文件,不会以整体的形式通过互联网传输。互联网的底层协议TCP/IP会将大段信息分割成更小的片段。正如CS50课程中所演示的,一张“快乐的猫”的图片就被形象地分割成了四块。
每个数据片段都被放入一个独立的虚拟信封中,称为数据包。为了确保接收方能够正确地将数据片段重新组合起来,传输控制协议 (TCP) 会在每个数据包中添加一个序列号(例如,“1/4”、“2/4”、“3/4”)。这使得接收计算机能够按正确的顺序重新组装数据片段,并且至关重要的是,能够检测到传输过程中是否有数据包丢失。
数据科学连接: TCP/IP 的稳健性使得分块和分布式处理等高级数据工程概念能够可靠地运行。当您批量导入大型文件或使用 MapReduce 等框架将大型作业分解成更小的部分时,您是在更高的抽象层次上进行操作,但其基本原理是相同的。该协议对数据完整性的保证是任何数据管道的核心关注点。
3. 一台服务器,多种角色:端口的作用
IP 地址负责将数据包发送到正确的计算机,但它并不指定计算机上的哪个应用程序应该接收数据包。一台服务器可能同时运行 Web 服务器、邮件服务器和数据库服务器。这时就需要用到端口了。
端口是服务器上运行的特定服务的唯一数字标识符。随着时间的推移,人们建立了一套标准端口:端口 80 通常用于标准 Web 流量(HTTP),端口 443 用于安全 Web 流量(HTTPS),端口 25 用于电子邮件。端口允许具有单个 IP 地址的单个服务器“复用”其服务,确保对网页的请求发送到 Web 服务器而不是电子邮件服务器。因此,IP 地址将数据包发送到正确的机器,而端口号则将其发送到该机器上的正确应用程序——这种两级寻址系统对于现代多任务 Web 至关重要。
数据科学连接: 这在我们的日常工作中非常实用。当您连接到 PostgreSQL 数据库时,标准 :5432 you append to the IP address is precisely this concept in action, directing your request to the database application. When you deploy a model via an API or run a Jupyter server on your local machine, you are using ports (like localhost:8888) to expose that specific service to network requests.
4. DNS:互联网的巨型缓存词典
人类浏览网页时不会像这样输入一串数字。 142.250.191.78. We use human-friendly domain names like google.com. The system that translates these names into machine-readable IP addresses is the Domain Name System (DNS).
从功能上看,DNS 是“字典”这种抽象数据类型的大规模分布式实现。它将键(域名)与值(IP 地址)关联起来。为了应对互联网的巨大规模并提供快速响应,DNS 采用分层结构,并且高度依赖缓存。您的计算机、本地网络和互联网服务提供商 (ISP) 都会缓存最近的 DNS 查询结果,这样就无需反复向根服务器查询同一地址。
数据科学连接: 这种大规模分布式缓存的原理是我们数据科学中经常使用的基本模式。它为诸如 Python 函数中的记忆化、缓存缓慢数据库查询结果或将中间数据帧存储到磁盘等技术提供了一个强有力的现实世界类比。DNS 就是一个全球规模的分布式键值缓存示例,它使现代网络得以正常运行。
5. HTTP 状态码:您的调试指南针
当您的浏览器(客户端)向服务器请求页面时,服务器的响应以一个三位数的 HTTP 状态码开头。该代码简要概述了请求是否成功或发生了何种错误。
这些代码按类别分组:
- 200秒(
200 OK): 请求成功。 - 300秒(
301 Moved Permanently): 您已被重定向。讲座举例说明……safetyschool.orgwhich returns a301code to redirect the browser to Yale’s website. - 400秒(
404 Not Found): 客户端出现错误。这意味着错误出在您这边——您请求的资源不存在,或者您没有访问该资源的权限。 - 500秒(
500 Internal Server Error): 服务器端出现错误。服务器在尝试处理您的有效请求时遇到问题。
数据科学连接: 对于任何使用 API 或网络爬虫的人来说,理解这些代码意味着能够获得可操作的诊断信息,而不是仅仅看到模糊的“请求失败”错误。 404 error tells you to check your URL endpoint, while a 403 Forbidden error tells you to check your API key. A 500 error means the problem is likely with the service itself.
“……任何时候你看到 500 错误,你也有责任,所以从这个角度来说,你既是用户又是服务器……”——哈佛 CS50x 2025(YouTube)——讲座:HTML、CSS、JavaScript
6. HTML 用于构建结构,而非样式
超文本标记语言 (HTML) 是创建网页的标准语言。它是一种标记语言,而非编程语言;它的目的是描述和组织内容,而不是执行逻辑。HTML 使用“标签”(例如 <a> 标签)。 <p> for a paragraph or <div> for a division) and “attributes” (like class 或 id) to define elements.
当浏览器接收到 HTML 文件时,它会解析文本,在内存中构建一个树状数据结构,称为文档对象模型 (DOM)。这棵树代表了页面的结构。现代 HTML 强调使用语义标签,例如 <div>。 <header>, <main>以及 <footer>. These tags don’t just create boxes on a page; they give meaning to the structure, helping search engines, accessibility tools, and AI models understand the relative importance of different content sections.
数据科学连接: 在数据科学中,对 DOM 的透彻理解是网页抓取的绝对基础。为了从页面中提取特定数据,抓取工具必须遍历 DOM 树,通过标签、类或 ID 选择元素。这种“关注点分离”原则——使用 HTML 构建结构,使用另一种语言(CSS)进行样式设计——与“整洁数据”原则有着密切的联系,后者强调数据集的逻辑结构应独立于其最终呈现方式。
今天申请什么
- 当 API 调用失败时,检查 HTTP 状态代码(例如,404 与 500),以诊断错误是您这边还是服务器那边。
- 使用浏览器的“开发者工具”(右键单击 -> 检查)查看“网络”选项卡,查看浏览器发出的实际请求和响应。
- 在抓取网站之前,请检查其 HTML 结构,以确定包含所需数据的特定标签、类或 ID。
- 连接数据库或 API 时,请注意端口号,并确认它正在将您的请求定向到服务器上的正确应用程序。
- 下次遇到数据管道延迟时,请考虑 DNS 缓存;查询速度慢或缓存过期都可能是造成延迟的原因。
关闭
这些概念并非只是开发人员的学术细节。从数据包的物理路由(TCP/IP)到服务的逻辑寻址(DNS、端口)以及请求语言(HTTP),这些分层协议构成了我们数据管道赖以生存的无形系统。理解数据的 如何 和结构有助于更直观地掌握性能瓶颈、错误诊断和数据提取。本系列讲座的下一讲将探讨如何使用 JavaScript 实现 Web 内容的动态化,JavaScript 正是我们日常使用的交互式数据可视化背后的引擎。
更好地理解这些协议会如何改变您设计下一个数据收集脚本的方式?
Base: Harvard CS50x 2025 (YouTube).

