第4章 返回结果的HTTP状态码
按2XX成功、3XX重定向、4XX客户端错误和5XX服务器错误解释原书列出的14个代表状态码
第4章 返回结果的HTTP状态码
本课程对应[日]上野宣《图解HTTP》,于均良译,人民邮电出版社/图灵教育,2014年4月首版,308页,双色印刷,ISBN 9787115351531;原书《HTTPの教科書》,ISBN 9784798126258。图灵官方资料标明出版日期为2014年4月22日、172张图解;正式目录为11章、202个节/小节节点。本页严格按该首版章次组织,不用后续规范替换原书语境。
学习目标
- 能解释“第4章 返回结果的HTTP状态码”全部正式节点,并把概念定位到真实请求、响应或应用状态。
- 能绘制客户端、中介、服务器之间的消息方向、主体边界和关键状态转移。
- 能设计单变量实验,验证“只看状态码和相关首部就能判断请求是否完成、是否需要新请求、责任在客户端还是服务器,以及主体是否存在”。
- 能写出并提交包含原始报文、失败反例、恢复条件和版次边界的独立证据包。
机制总览
第4章 返回结果的HTTP状态码:机制路径
- 1
从一条可证伪的HTTP交换开始
先预测:只按百位背分类而忽略304无响应主体、401认证挑战、206范围和重定向方法变化,会让客户端做出错误后续动作。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
- 2
核心词汇与首版边界
这些词汇按2014年首版语义使用。SPDY、HTTP/2.0、X-XSS-Protection、P3P等保留出版时状态;HTTP/2最终规范、HTTP/3、JWT、OAuth、SameSite等后续技术只能作为另行标注的现代补充,不改变本书目录分母。
- 3
核心机制深读
200可能承载GET结果,也可能报告POST处理结果;204明确没有主体;206必须带范围信息。状态码只给处理类别,Location、WWW-Authenticate、Retry-After和表示首部才决定下一步。
章级决策实验
第4章 返回结果的HTTP状态码:机制与证据
切换《第4章 返回结果的HTTP状态码》的三个关键教学阶段,先解释机制,再用运行与失败证据验证结论。
选择推理阶段
当前阶段 · 从一条可证伪的HTTP交换开始
先预测:只按百位背分类而忽略304无响应主体、401认证挑战、206范围和重定向方法变化,会让客户端做出错误后续动作。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
可核验证据
保存「从一条可证伪的HTTP交换开始」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
学完《第4章 返回结果的HTTP状态码》后,应能从输入和前置条件推导状态变化,并用可重复的构建、运行或边界测试证明结果。
失效—证据矩阵
第4章 返回结果的HTTP状态码:失效与核验
从一条可证伪的HTTP交换开始
典型失效
若只背诵「从一条可证伪的HTTP交换开始」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「从一条可证伪的HTTP交换开始」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
核心词汇与首版边界
典型失效
若只背诵「核心词汇与首版边界」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「核心词汇与首版边界」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
核心机制深读
典型失效
若只背诵「核心机制深读」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「核心机制深读」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
从一条可证伪的HTTP交换开始
先预测:只按百位背分类而忽略304无响应主体、401认证挑战、206范围和重定向方法变化,会让客户端做出错误后续动作。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
本章的主问题是:按2XX成功、3XX重定向、4XX客户端错误和5XX服务器错误解释原书列出的14个代表状态码。原书以图解建立直觉,本课程把图解升级为可操作轨迹:每个箭头必须注明方向、协议对象和完成点;每个安全结论必须附一条攻击或误配置反例。
验收不变量是:只看状态码和相关首部就能判断请求是否完成、是否需要新请求、责任在客户端还是服务器,以及主体是否存在。浏览器页面“看起来正常”只能说明某个终点出现,不能单独证明DNS、连接、TLS、缓存、认证或授权中的哪一段正确。
核心词汇与首版边界
↡服务器对请求处理结果给出的三位数字分类标记、↡2XX类,表示请求被正常接收、理解和处理,但主体与语义仍因具体代码而异、↡3XX类,要求客户端结合Location或缓存验证器采取附加动作、↡4XX类,表示请求语法、认证、权限或目标资源存在问题、↡5XX类,表示服务器在有效请求处理过程中失败或暂时不可用
这些词汇按2014年首版语义使用。SPDY、HTTP/2.0、X-XSS-Protection、P3P等保留出版时状态;HTTP/2最终规范、HTTP/3、JWT、OAuth、SameSite等后续技术只能作为另行标注的现代补充,不改变本书目录分母。
核心机制深读
状态码必须连同方法和首部读
200可能承载GET结果,也可能报告POST处理结果;204明确没有主体;206必须带范围信息。状态码只给处理类别,Location、WWW-Authenticate、Retry-After和表示首部才决定下一步。
动手试:先写下预期请求、响应与状态变化,再捕获一次正常交换和一次只改一个变量的失败交换。比较状态码、首部、主体、缓存或会话状态,确认结论来自证据而非浏览器表象。
重定向的关键差异
301表示永久迁移,302表示临时迁移;303明确要求改用GET读取另一个资源;307临时迁移但禁止擅自改变原方法;304不是普通重定向,而是条件GET/HEAD验证成功后继续使用本地缓存。
401与403不是同义词
401表示尚未提供可接受的认证凭据,响应应带WWW-Authenticate挑战;403表示服务器理解请求但拒绝授权,即使重新认证也未必允许。404则表示未找到目标,也可用于隐藏拒绝访问资源的存在。
500与503的运维含义
500表示处理请求时发生未预期内部错误;503表示因过载或维护暂时不能处理,适合配合Retry-After。重试前必须判断方法是否幂等,并设置上限和退避,不能看到5XX就无限重放POST。
原书目录核对清单
本页承担19个目录或复习节点,正文、图解、实验和题目必须能反向定位每一项:
- 4.1 状态码告知从服务器端返回的请求结果
- 4.2 2XX成功
- 4.2.1 200 OK
- 4.2.2 204 No Content
- 4.2.3 206 Partial Content
- 4.3 3XX重定向
- 4.3.1 301 Moved Permanently
- 4.3.2 302 Found
- 4.3.3 303 See Other
- 4.3.4 304 Not Modified
- 4.3.5 307 Temporary Redirect
- 4.4 4XX客户端错误
- 4.4.1 400 Bad Request
- 4.4.2 401 Unauthorized
- 4.4.3 403 Forbidden
- 4.4.4 404 Not Found
- 4.5 5XX服务器错误
- 4.5.1 500 Internal Server Error
- 4.5.2 503 Service Unavailable
复原正常协议轨迹
固定URI、客户端、网络和服务端状态,标出请求行、首部、主体、中介与最终响应。
可复现实验
HTTP/1.1 204 No Content
Date: Tue, 16 Jul 2026 08:00:00 GMT
(no message body)HTTP/1.1 303 See Other
Location: /orders/42
next request: GET /orders/42HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="members"独立证据门
第4章 返回结果的HTTP状态码 的最小证据包包含:首版目录节点、请求与响应原文、连接/中介方向、主体边界、缓存或会话状态、一个单变量失败、最终副作用、已知限制、恢复步骤、责任人与复核人。
练习
练习
问题 1:为什么“第4章 返回结果的HTTP状态码”必须固定2014年首版语境?
问题 2:怎样构造“只按百位背分类而忽略304无响应主体、401认证挑战、206范围和重定向方法变化,会让客户端做出错误后续动作”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第4章 返回结果的HTTP状态码”的核心是按2XX成功、3XX重定向、4XX客户端错误和5XX服务器错误解释原书列出的14个代表状态码。真正掌握不止是认出术语,而是能让一条请求在消息、连接、中介、表示、身份和攻击边界之间闭环,并用失败实验说明边界一旦被破坏会发生什么。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 状态码
服务器对请求处理结果给出的三位数字分类标记。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- 成功
2XX类,表示请求被正常接收、理解和处理,但主体与语义仍因具体代码而异。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- 重定向
3XX类,要求客户端结合Location或缓存验证器采取附加动作。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- 客户端错误
4XX类,表示请求语法、认证、权限或目标资源存在问题。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- 服务器错误
5XX类,表示服务器在有效请求处理过程中失败或暂时不可用。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
← 上一页:第3章 HTTP报文内的HTTP信息 · 下一页:第5章 与HTTP协作的Web服务器 →
原版目录概念补充核对
以下条目补齐官方目录中容易被示例主线掩盖的概念。它们不重复罗列目录,而是明确每项概念的机制、适用边界和验收证据。
4.2 2XX成功:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.2 2XX成功描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.2.1 200 OK:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.2.1 200 OK描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.2.2 204 No Content:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.2.2 204 No Content描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.2.3 206 Partial Content:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.2.3 206 Partial Content描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3 3XX重定向:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3 3XX重定向描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3.1 301 Moved Permanently:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3.1 301 Moved Permanently描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3.2 302 Found:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3.2 302 Found描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3.3 303 See Other:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3.3 303 See Other描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3.4 304 Not Modified:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3.4 304 Not Modified描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.3.5 307 Temporary Redirect:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.3.5 307 Temporary Redirect描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.4 4XX客户端错误:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.4 4XX客户端错误描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.4.1 400 Bad Request:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.4.1 400 Bad Request描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.4.2 401 Unauthorized:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.4.2 401 Unauthorized描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.4.3 403 Forbidden:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.4.3 403 Forbidden描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.4.4 404 Not Found:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.4.4 404 Not Found描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.5 5XX服务器错误:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.5 5XX服务器错误描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.5.1 500 Internal Server Error:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.5.1 500 Internal Server Error描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。
4.5.2 503 Service Unavailable:机制、边界与证据
第4章 返回结果的HTTP状态码中的4.5.2 503 Service Unavailable描述 Web 组件之间的一项可观察契约。先写出发送方、接收方和中间节点各自保存的状态,再以一组成功报文和一组边界/拒绝报文核对字段、时序与最终表示,防止把实现习惯误认为协议保证。