Response 响应详解
HTTP 响应状态码用于指示请求是否成功完成,按首位数字可分为五类:1xx 信息响应、2xx 成功响应、3xx 重定向、4xx 客户端错误、5xx 服务端错误。
📘 HTTP 响应状态码分类总览
分类 | 范围 | 描述 |
---|---|---|
1xx | 100-199 | 信息响应,请求已接收,继续处理 |
2xx | 200-299 | 成功响应,表示请求已完成 |
3xx | 300-399 | 重定向,需要进一步操作 |
4xx | 400-499 | 客户端错误,语法或权限问题 |
5xx | 500-599 | 服务器错误,请求有效但服务器错误 |
🔍 各类状态码详解
Response 响应详解
理解常用的 HTTP 响应状态码有助于编写符合标准的 API,并优化前后端的通信体验。
✅ 常见 HTTP 状态码一览(含描述与使用场景)
状态码 | 描述 | 使用场景 |
---|---|---|
100 Continue | 初始部分已接受,继续发送请求 | 客户端发送大请求体前先探测 |
101 Switching Protocols | 协议切换请求成功 | 升级 HTTP 到 WebSocket |
102 Processing | WebDAV 正在处理请求 | 适用于长处理任务 |
103 Early Hints | 响应头提前返回 | 预加载资源,如 preload 链接 |
200 OK | 请求成功 | GET/PUT 成功返回资源 |
201 Created | 创建成功 | POST 成功创建资源 |
202 Accepted | 请求已接受但未完成 | 异步提交任务等 |
203 Non-Authoritative Information | 返回非原始服务器信息 | 代理缓存数据 |
204 No Content | 请求成功无返回体 | DELETE/PUT |
205 Reset Content | 请求成功,重置页面视图 | 表单提交后清空界面 |
206 Partial Content | 部分响应内容成功 | 用于 Range 请求下载文件片段 |
300 Multiple Choices | 多个可选响应 | 多语言、多格式选择 |
301 Moved Permanently | 永久重定向 | 旧页面永久跳转 |
302 Found | 临时跳转 | 登录重定向 |
303 See Other | 获取资源应使用 GET | 提交表单后跳转详情页 |
304 Not Modified | 缓存命中无更新 | 结合 ETag/If-None-Match 使用 |
307 Temporary Redirect | 临时重定向,保留方法 | POST 保持 POST |
308 Permanent Redirect | 永久重定向,保留方法 | API 路由调整永久迁移 |
400 Bad Request | 请求语法无效 | 参数错误、格式错误 |
401 Unauthorized | 未认证 | 未登录访问私有接口 |
403 Forbidden | 已认证但无权限 | 普通用户访问管理员接口 |
404 Not Found | 资源不存在 | 链接或接口错误 |
405 Method Not Allowed | 方法不允许 | POST 接口被 GET 请求 |
406 Not Acceptable | 不接受的内容格式 | Accept 头与响应类型不符 |
407 Proxy Authentication Required | 代理需认证 | 使用 代理服务器访问 |
408 Request Timeout | 客户端超时 | 长时间无响应或请求慢 |
409 Conflict | 请求冲突 | 注册用户已存在、并发冲突 |
410 Gone | 资源永久删除 | 接口或数据废弃 |
411 Length Required | 缺失 Content-Length | PUT 上传数据缺长度 |
412 Precondition Failed | 前提条件失败 | If-Match 校验失败 |
413 Payload Too Large | 请求体过大 | 上传文件超出限制 |
414 URI Too Long | URL 过长 | GET 参数过多 |
415 Unsupported Media Type | 类型不支持 | Content-Type 错误 |
416 Range Not Satisfiable | 请求范围无效 | 下载超范围 |
417 Expectation Failed | 期望失败 | Expect 头检查失败 |
418 I'm a teapot | 彩蛋码 | 拒绝冲泡咖啡(RFC 2324) |
422 Unprocessable Entity | 请求语义错误 | 表单验证失败 |
425 Too Early | 请求过早 | TLS Early Data 重放攻击风险 |
426 Upgrade Required | 需升级协议 | HTTP/1.1 → HTTP/2 |
429 Too Many Requests | 请求频繁被限流 | 接口防刷保护 |
431 Request Header Fields Too Large | 请求头太大 | cookie 或 UA 过长 |
500 Internal Server Error | 服务器内部错误 | 未处理异常或配置错误 |
501 Not Implemented | 不支持的功能 | 接口未实现 |
502 Bad Gateway | 网关无效响应 | Nginx/代理后端异常 |
503 Service Unavailable | 服务不可用 | 服务宕机、维护中 |
504 Gateway Timeout | 网关超时 | 下游服务超时 |
505 HTTP Version Not Supported | 协议版本不支持 | HTTP/0.9、未知版本 |
507 Insufficient Storage | 存储不足 | 文件服务存储用尽 |
511 Network Authentication Required | 需要网络验证 | WiFi 登录页认证 |
🧪 实战代码示例
- Node.js
- Python Flask
app.get('/success', (req, res) => {
res.status(200).send('OK');
});
app.post('/create', (req, res) => {
res.status(201).send('Resource created');
});
app.get('/not-found', (req, res) => {
res.status(404).send('Not Found');
});
app.get('/server-error', (req, res) => {
res.status(500).send('Internal Server Error');
});
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/success')
def success():
return jsonify(message='OK'), 200
@app.route('/create', methods=['POST'])
def create():
return jsonify(message='Created'), 201
@app.route('/not-found')
def not_found():
return jsonify(error='Not Found'), 404
@app.route('/server-error')
def server_error():
return jsonify(error='Internal Error'), 500
🧠 Tips & Best Practice
- Tips
- Caution
- Info
tip
建议始终根据请求结果返回对应语义的状态码,避免全部使用 200。
caution
401
表示未认证,而 403
是认证了但无权限。注意区分!
info
状态码 204
常用于 DELETE 成功但无响应体的场景。