第 1 章 · 打开一个网页第 4 页,共 5 页
请求和响应里都写了什么?
服务器要看懂请求,手机要看懂响应,双方得按同一种格式说话。这一页把请求和响应拆开,看每一部分写的是什么,以及那几个常见的三位数字。
为什么需要
浏览器打开菜谱页,百家菜 App 取回一道菜的评论,用的都是请求和响应。两台机器能互相听懂,是因为它们遵守同一套约定好的说话格式:,它规定请求和响应各写些什么。网址开头的 https:// 就是说:用 HTTP,而且加密。
两者的区别在内容:浏览器要的是给人看的网页,收到后排成页面;App 要的常常是给程序读的数据,例如一份评论清单,再由 App 按自己的样子显示出来。
怎样做
一个请求主要写着四样东西:
- (HTTP method):要做什么。常见的两种是取东西(GET)和交东西(POST)。
- 要的是哪一样:网址里域名后面的那一段,叫路径,例如
/recipes/1024。 - 几条附加说明:例如要找的是
potluck.example这个网站、读者能看懂哪种语言。 - 正文:交东西时才有,例如一条评论的文字。
响应也写着几样东西:一个三位数的(status code)和一句简短说明,例如 200 OK,表示成功;几条附加说明,例如正文是网页还是数据、可以保存多久;以及正文本身,例如菜谱页或评论清单。
服务器对外公开的那份请求清单,写明可以向它要哪些东西、要怎样问,叫(API)。这里的接口不是手机上插充电线的接口。在下图里从百家菜的请求清单里选一项发出去,看请求和响应各写了什么。
请求清单:选一项发出去,看服务器怎样回答
先看这里从清单里选一项,看下面的请求和响应各写了什么、开头的三位数字是多少;再把「服务器此刻」改成「出了故障」,同样的请求会得到什么。
请求
先从清单里选一项。
响应
先从清单里选一项。
- 2 开头:成功
- 3 开头:还要客户端再做一步,例如换个地址去取(301),或者接着用手里那一份(304)
- 4 开头:请求有问题,按现在的样子办不到
- 5 开头:请求看起来没问题,服务器那一侧没能完成
状态码按第一位数字分成五类,其中 1 开头表示「收到了,还在继续处理」。遇到不认识的三位数字,看第一位就能知道大概:例如 503 以 5 开头,问题在服务器一侧,它暂时忙不过来或者正在维护;第 11 章要讲的 429 以 4 开头,表示这个请求者在一段时间里请求得太多了。
代价是什么
约定好格式,任何浏览器都能和任何网站说话;代价是每个请求都要带上这些附加说明。而且 HTTP 本身不记得你上一个请求说过什么,网站要记住「你已经登录」,得另想办法(第 4 章)。
请求清单一旦公开,就会有别的程序照着它来取、来交,改动清单时要顾及正在使用它的程序。状态码也只是粗略的分类,具体原因要看正文。看到 5 开头的错误,也不一定是网站自己的服务器坏了。有的公司站在许多网站前面,替它们接收和转交请求,Cloudflare 就是一家(第 6 章细讲这样的角色)。2025 年 11 月 18 日,访问这些网站的人收到的是它发回的 5 开头的错误页,错误出在 Cloudflare 自己的网络里。
资料来源
以下资料均于 2026-10-20 访问。