请求方法、状态码与重定向

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

方法表达操作意图,状态码表达本次 HTTP(Hypertext Transfer Protocol,超文本传输协议)结果。网络请求成功不等于业务操作成功;方法名也不会自动实现幂等。

1. 方法与状态速查#

方法 语义 安全/幂等
GET/HEAD 读取表示/仅响应头 安全且幂等;不要通过 GET 执行扣款等操作
POST 提交数据进行处理 默认不保证幂等
PUT 创建或替换指定资源状态 语义幂等,仍需处理并发覆盖
PATCH 局部修改 不保证幂等,例如“余额加一”
DELETE 删除指定资源 语义幂等;重复删除可以返回不同状态码
OPTIONS 查询通信选项,也用于跨域预检 安全且幂等

“安全”指客户端不要求改变服务端业务状态,不代表完全没有日志等副作用。幂等指重复请求的预期业务效果相同,不要求响应字节一致。HTTP 语义标准。

状态 运维解读
200/201/202/204 成功/已创建/已接收但未完成/无响应正文;202 应配任务查询机制
304 缓存验证后复用已有正文;不是普通业务重定向
400/401/403/404/405 请求错误/需有效身份凭证/拒绝授权/不存在或隐藏存在性/方法不允许
409/412 业务冲突/If-Match 等前置条件不满足
413/415/429 请求体太大/媒体类型不支持/限流
500/502/503/504 内部错误/网关上游响应异常/暂不可用/网关等待上游超时

502/503/504 可能由不同代理或应用产生,必须看生成它的那一跳。401 通常应携带合适的 WWW-Authenticate 挑战;不能把所有认证故障都改成 200。

2. 重定向区别#

状态 意图 POST 跟随后可能怎样
301/302 永久/临时移动 客户端可能改为 GET
303 转到结果页面 通常改为 GET,适合提交后查看结果
307/308 临时/永久移动,保留方法 保留方法和请求体;目标必须适合接收原操作

不要让携带凭证的写接口跨域跳转;永久重定向可能被缓存,回退不只是修改服务端。

3. Hands-on:观察方法改变和错误来源#

先按 HTTP 专题实验环境 启动本地诊断 Nginx。以下只有诊断数据,不调用业务写接口。

for code in 301 302 303 307 308; do
  printf '\nredirect=%s\n' "$code"
  curl -sS --max-time 5 --max-redirs 3 -L --data 'probe=1' "http://127.0.0.1:18080/r$code"
done
curl -sS -D - -o /dev/null http://127.0.0.1:18080/unavailable
curl -sS -D - -o /dev/null http://127.0.0.1:18080/broken
docker logs "$HTTP_LAB_NAME" --tail 12

预期 301/302/303 后输出 GET;307/308 后输出 POST。不要增加 -X POST,它会影响 curl 的自动方法选择,掩盖本次实验要观察的行为。

/unavailable 返回 503 + Retry-After,日志没有上游状态;/broken 连接关闭端口,返回 502,错误日志有 connection refused。两者展示“服务端主动拒绝”与“代理连接失败”的不同证据。

4. 迁移到真实业务验收#

选择测试租户和可回收资源,按接口契约逐一测试未登录、权限不足、不存在、非法方法、冲突;记录响应体错误码和请求 ID。不要假定每个服务都支持 PUT/PATCH。并发更新使用版本号/ETag + If-Match,陈旧版本应拒绝而非静默覆盖。失败时恢复本次路由配置,重测原始路径;本地环境按专题首页清理。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭