搞清楚当一个网页出现在你屏幕上时,到底是谁在向谁要什么。
在 Kodokon 中打开本课想象一家餐厅。你坐下来,招呼服务员,点一道菜,服务员把菜端上来。网页的运作方式完全一样。你和你的浏览器就是客户端:提出要求的那一方。对面是一台服务器:一台常年开着机的电脑,待在某个装了空调的机房里,它唯一的工作就是等待请求并作出回应。服务器一点也不神秘:它就是一台和你手上这台一样的机器,只不过它从不休息,也没有屏幕。
最需要记住的一点:服务器永远不会主动开口。只要你没有向它要东西,它就什么都不会发给你。每当你输入一个网址或者点击一个链接,你的浏览器就会发出一个请求,服务器则返回一个响应。请求,响应。请求,响应。整个网页世界就是这一来一回。
为了让请求准确送达,每一台联网的机器都有一个 IP 地址:一串数字,作用相当于邮政地址,比如 93.184.215.14。你的消息不是整块发出去的:它会被切成一个个小块,叫做数据包,每个数据包各走各的路,穿过几十台中转机器,到达之后再按正确的顺序重新拼装起来。你可以用 ping 命令来确认一台机器是否有回应。
ping -c 2 example.com
PING example.com (23.215.0.136): 56 data bytes
64 bytes from 23.215.0.136: icmp_seq=0 ttl=54 time=17.3 ms
64 bytes from 23.215.0.136: icmp_seq=1 ttl=54 time=16.9 ms
--- example.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss那服务器到底返回了什么?文本。一个网页无非就是一个用 HTML 写成的文本文件,服务器把它发给你,你的浏览器再把它排版显示出来。不用浏览器你也能亲眼看到这一点,用 curl 这个工具就行:它发出一个请求,然后把原始的响应直接打印在终端里。
curl -s https://example.com | head -n 5
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />___ -s https://example.com | head -n 5