HTTP:请求与响应入门 · 第 3 / 6 节

第 3 课:响应的信封:状态码及其含义

本课目标:

  • 读懂 HTTP 响应的状态行。
  • 把状态码归入正确的类别。
  • 说明响应体是否存在。

上一篇 << 2 | 下一篇 4 >>

服务器用一个三位数作答

服务器的回答同样是一个信封。信封的第一行是状态行,它总是以一个三位数的状态码开头。这个数字是服务器在说「我明白你的请求了」,或者「我找不到那个东西」,或者「我在处理时出故障了」12

讲解

状态行

典型的响应这样开头:

http
HTTP/1.1 200 OK
  • HTTP/1.1 是协议版本。
  • 200 是状态码。
  • OK原因短语,一个简短的人类可读标签。原因短语只是提示,真正起作用的是数字12

状态码类别

状态码的第一位数字告诉你它的类别:

  • 1xx:信息性(初学者很少见到)
  • 2xx:成功,例如 200 OK3
  • 3xx:重定向,例如 301 Moved Permanently
  • 4xx:客户端错误,例如 404 Not Found4
  • 5xx:服务器错误,例如 500 Internal Server Error5

状态码不是随意的报错文字,而是标准化的类别。

响应体

在响应头之后,响应可能带有一个响应体:浏览器索取的 HTML、图片、JSON 或其他数据本身。有些响应没有响应体,比如 204 No Content,因为状态码和响应头已经把答案说完了1

完整示例(跟着做)

下面是一次 GET 请求得到的成功响应:

http
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 1276
<!doctype html><html>...</html>
  • 状态码:200(成功)
  • Content-Type: text/html 告诉浏览器响应体是 HTML。
  • Content-Length: 1276 告诉浏览器要接收多少字节。
  • 响应体就是那个 HTML 页面。

再看一个 404 响应:

http
HTTP/1.1 404 Not FoundContent-Type: text/html

服务器在正常工作;它只是没有浏览器要的那个页面。

你来试试(填空示例)

把每个状态码和它的类别对上:

状态码类别
2002xx,成功
4044xx,客户端错误
5005xx,服务器错误
3013xx,重定向

小结 + 下一步

响应以状态码开头。第一位数字告诉你类别:2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务器错误。状态行和响应头之后,响应可能带着响应体。下一课,你将看到在浏览器里的什么位置能读到这一切。

Footnotes

  1. MDN: HTTP messages — https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages 2 3

  2. MDN: HTTP response status codes — https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status 2

  3. MDN: 200 OK — https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/200

  4. MDN: 404 Not Found — https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/404

  5. MDN: 500 Internal Server Error — https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/500

练习

01

打开浏览器的 Network 面板,重新加载一个页面,点击一条请求。查看响应头。你能找到状态码和 Content-Type 头吗?

第 1 级(热身)
完成标准 · 本地勾选
02

常见误判分析:一位学习者看到 404 Not Found,说「这个网站挂了」。解释为什么这个结论通常是错的,正确的结论应该是什么。

第 2 级(进阶)
完成标准 · 本地勾选