HTTP 请求和响应#
一个请求至少要看懂:方法、路径、查询参数、请求头、请求体。一个响应至少要看懂:状态码、响应头、响应体。
POST /api/tasks HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer <token>
{"title":"学习 HTTP"}HTTP/1.1 201 Created
Content-Type: application/json
{"id":42,"title":"学习 HTTP"}方法语义#
GET:读取,不应产生业务副作用;POST:创建或触发操作;PUT:整体替换,通常具有幂等性;PATCH:部分修改;DELETE:删除,权限校验尤其重要。
常见状态码#
| 状态码 | 含义 | 示例 |
|---|---|---|
| 200 | 成功 | 查询或更新成功 |
| 201 | 已创建 | 创建任务成功 |
| 204 | 成功但无响应体 | 删除成功 |
| 400 | 请求格式/参数错误 | JSON 或字段无效 |
| 401 | 未认证 | 未登录或令牌无效 |
| 403 | 已认证但无权限 | 删除他人数据 |
| 404 | 资源不存在 | 任务编号不存在 |
| 409 | 状态冲突 | 邮箱已注册 |
| 429 | 请求过多 | 触发频率限制 |
| 500 | 服务端意外错误 | 未处理异常 |
| 502 | 网关无法得到后端正常响应 | Nginx 后端未运行 |
| 503 | 服务暂不可用 | 维护或过载 |
必懂概念#
- HTTP 本身无状态;Cookie、Session、Token 用来关联身份或状态;
- HTTPS 保护传输过程,不会自动修复应用自身的权限漏洞;
- CORS 是浏览器的跨源访问控制,不是服务器防火墙,也不是认证;
- 域名不是服务器;DNS 负责查询地址,端口指向具体服务;
localhost在容器内指容器自己,不自动指宿主机或另一个容器;- 代理后要正确处理可信代理设置与客户端 IP,不能盲目信任任意转发头。
动手练习#
用浏览器开发者工具和 API 客户端观察一个真实请求:记录 URL、DNS/IP(能观察到时)、方法、状态码、内容类型、缓存相关头、请求/响应体。然后故意访问不存在的路径、发送无效 JSON、去掉认证头,对比响应。