打开一个网页是谁在和谁说话

为什么需要

百家菜是本课程虚构的家常菜谱网站,英文名 Potluck,网址里的 potluck 就是它。在手机上打开它的「番茄炒蛋」时,你看到的标题、用料和照片并没有事先存在手机里,而是放在百家菜的(server)上:一台一直开着、连着网,专门等别人来要东西的电脑。它可能远在另一座城市的机房里,机房就是集中摆放许多台电脑、供电和网络都很稳定的房间。

所以打开一个网页,其实是两台机器之间的一次对话:你的手机先开口,服务器再回答。这一来一回里任何一处出了问题,页面就打不开,或者一直转圈。这门课说的应用,指手机或电脑上帮你做一件事的软件,连同它背后的服务器,比如在百家菜里搜菜谱、收藏一道菜谱、在菜谱下面发评论。要看懂一个应用是怎样搭起来的,就从这一次对话看起。

怎样做

先开口要东西的一方叫(client),这里是你手机上的浏览器,也就是用来打开网页的 App。它发出的一条消息叫(request),写明想要什么,例如「请给我第 1024 号菜谱的页面」。服务器收到后找出这道菜谱,发回一条(response),里面是结果,或者是做不到的原因。

你点的链接背后是一个(URL):https://potluck.example/recipes/1024,它写明要去哪个网站、拿哪一样东西。下一页和第 4 页会把它拆开来看。

在下图里一步一步播放这次访问。图上的每个框是一个(component),即系统里负责一件事的一个部分;箭头从发出请求的一方指向接到请求的一方,响应沿同一条线回来。

一次完整的来回:手机发出请求,服务器发回响应

先看这里按「下一步」,看请求从手机出发、到达服务器,响应再沿原路回来。点一下任意一个框,看它负责什么。

发起方
处理

点一下图上的框,这里会写出它负责什么。

尚未开始,共 4 步

还没开始。按「下一步」,从你点开链接的那一刻看起。

打个比方,这像在车站的服务台问路:你先开口,工作人员才回答,他不会主动叫住每个路过的人。这个比方有一处不成立:服务台一次只能接待一个人,服务器却能同时处理许多人的请求。

客户端和服务器说的是角色,不是机器的种类:谁先开口要东西,谁就是这一次的客户端。百家菜服务器去请短信服务给你发登录验证码时,它就是客户端。一个组件请另一个组件做一件事、并等它给出结果,叫一次(call);手机向服务器发请求,就是一次调用。

代价是什么

这样分工,内容只要放在服务器这一处,所有人取到的都是同一份;更新一次,大家看到的就都是新的。代价是服务器要一直开着、一直连着网:它出了故障,或者路上哪一段断了,手机等不到响应,页面就打不开。

还有一点:服务器只回答问它的人。你想知道菜谱下面有没有新评论,手机只能再发一次请求去问。服务器怎样主动通知手机,第 18 章讲聊天时再说。

资料来源

以下资料均于 2026-10-20 访问。

  1. How the web worksMDN Web Docs(Mozilla),2026-07-20
  2. What is a web server?MDN Web Docs(Mozilla),2025-04-29
  3. Client-Server overviewMDN Web Docs(Mozilla),2026-09-10
  4. Overview of HTTPMDN Web Docs(Mozilla),2026-10-08