本节摘要:HTTP 是承载 REST 契约的默认语法——方法表达意图,URI 定位资源,状态码回执结果,头部补足自描述信息,请求体与响应体承载资源的表示。本节用一张请求解剖图和一次完整握手,把 HTTP 这套"契约的语言"逐段拆干净,为第 2 章的方法与状态码条款及第 4 章的序列化做语法铺垫。
阅读完本节,你应当能够:
第 1.3 节已经定了方向:多数 REST 接口选 HTTP 当载体。接下来就要会读这门语言的词法——不然第 2 章讲"方法语义是你的动词、状态码是你的回执"时,你会卡在没有语感的地基上。
HTTP 其实不怕学,它本质是一份"人类能读的文本信封":请求是一封问询,响应是回信,两者都分头(头部)和身(主体)。把信封的四个格子认全,就掌握了八成语法。
先把一份典型 GET 请求拆开看:
GET /book/42 HTTP/1.1 Host: api.example.com Accept: application/json X-Request-Id: 88f0-9a12
三段构成:
GET /book/42 HTTP/1.1。依次是方法(意图)、URI(指向哪份资源)、协议版本。Host 告诉服务器访问哪台虚拟主机;Accept 声明"我期望的表示格式";X-Request-Id 是自定义的追踪号,方便全链路排查。再看一份带请求体请求的解剖:
POST /book HTTP/1.1 Host: api.example.com Content-Type: application/json Content-Length: 74 {"title":"设计中的设计","author":"小七","pages":240}
这里 Content-Type 声明主体的媒体类型,Content-Length 声明字节长度。服务器读到这封请求,就知道"要在 /book 下新增一份 JSON 表示的资源"。
服务器回信也分境界。拿一次成功创建回执来看:
HTTP/1.1 201 Created Location: http://api.example.com/book/42 Content-Type: application/json Cache-Control: max-age=3600 {"id":42,"title":"设计中的设计"}
HTTP/1.1 201 Created。201 是状态码,Created 是原因短语,两者合起来回执"创建成功了"。Location 给出新资源的 URI,客户端拿它去 follow;Cache-Control 声明缓存策略;Content-Type 说清主体格式。把请求与响应归纳成一张解剖透视图,四格里各自写什么都一目了然:

不必背整张状态码表,先建立三类印象,细节在第 2、3 章补:
Content-Type 说格式,Accept 议格式,Authorization 递凭证,Cache-Control 管缓存。💡 关键直觉:读者只要能"读懂信封四格 + 认得方法状态码头部三类记号",就能在故障时拆开任何一次通信,判断问题出在客户端还是服务器端。这是后续排查一切接口问题的基本功。
把前面凑合成完整脚本:客户端向 /book 发 POST(信封:方法 POST、URI /book、头 Content-Type json、体 JSON),服务器验完数据回 201 Created,Location 指向 /book/42。客户端再按 Location 发一次 GET /book/42,服务器回 200 OK 带上书资源的 JSON。两次握手之间没有"会话记忆",全靠请求自描述——正是无状态与自描述消息两个约束在语法层的落点。
把这套词法用在排障上更有用。一次 504 网关超时的排查里,先看状态行确认是 5xx 跟客户端无关,再看响应头的 Retry-After 判断要不要重试,最后靠 X-Request-Id 在网关日志里把这一条请求从头到尾拎出来。能这么干,是因为信封四格各司其职:状态码告诉你"谁的锅",头部告诉你"怎么补救",追踪号告诉你"往哪查"。这就是语法表真正的价值——不是考试要背,而是故障时拿来拆通信。
语法表已备齐。下一章我们就进到车间二,开始拼装契约的四大构件——先从那根最粗的主体柱"资源建模"动工。