Kodokon kodokon.com

看懂 HTTP:方法和状态码

读一遍真实的请求和真实的响应,弄明白 200、404 和 500 到底是什么意思。

8 分钟 · 3 题

在 Kodokon 中打开本课

HTTP(HyperText Transfer Protocol,超文本传输协议)是浏览器和服务器之间对话所用的语言。好消息是:它不是让人看不懂的二进制,而是可读的文本。一个请求几行就写完了:一个动词、一个地址,然后是一些头部,用来补充上下文(我偏好哪种语言、我用的是哪个浏览器)。响应也是同样的结构:一个数字代码、一些头部、一个空行,然后才是内容。

BASH
curl -i https://example.com

HTTP/2 200
content-type: text/html; charset=UTF-8
content-length: 1256
cache-control: max-age=86400

<!doctype html>
<html>
...
-i 选项让 curl 把响应的头部也一起打印出来,而不只是内容。

请求开头的那个动词叫做方法,它宣告了你的意图。GET 只是请求读取一个资源:你每打开一个页面,浏览器做的就是这件事。POST 向服务器发送数据,典型的场景就是你提交一个注册表单。PUT 更新一个已经存在的条目,DELETE 则请求把它删掉。重点记住前面两个:绝大部分流量都是它们贡献的。

BASH
curl -X POST -d "name=Sarah&age=30" https://httpbin.org/post
一个 POST 请求:-d 提供要发送的数据,就像表单做的那样。

每个响应都以一个三位数的状态码开头。光看第一位数字就能明白当前的状况。2xx 这一族表示成功:200 的意思是“这就是你要的东西”。3xx 是重定向:301 的意思是“这个页面搬家了,去那边找”。4xx 指向客户端这一侧的错误:404(找不到资源)、403(禁止访问)、401(你得先登录)。5xx 指向服务器这一侧的故障:500 就是最经典的内部错误。

BASH
curl -I https://example.com/this-page-does-not-exist

HTTP/2 404
content-type: text/html; charset=UTF-8
-I 选项(大写的 i)只请求头部:用来查状态码再合适不过。

知识检测

确认你已牢记本课的重点内容。

  1. 状态码 404 是什么意思?
    • 服务器崩溃了
    • 在这个地址上找不到所请求的资源
    • 请求成功了
  2. 哪一族状态码表示问题出在服务器一侧?
    • 2xx 这一族
    • 3xx 这一族
    • 4xx 这一族
    • 5xx 这一族
  3. 浏览器只是想读取一个页面时,用的是哪个 HTTP 方法?
    • GET
    • POST
    • DELETE