目录
- HTTP 请求的定义
- 基本概念
- 类比解释(网购订单示例)
- HTTP 请求的结构
- 请求行、请求头、请求体
- 常见请求方法对比
- HTTP 请求的工作原理
- 客户端与服务端交互流程
- 状态码与响应机制
- HTTP 请求的常见类型
- GET、POST、PUT、DELETE
- 安全性与幂等性说明
- 实际应用与调试工具
- 浏览器开发者工具
- Postman 与 cURL 示例
- 安全性与最佳实践
- 常见问题解答(FAQ)
1. HTTP 请求的定义
基本概念
HTTP 请求(HTTP Request) 是客户端(如浏览器、App)向服务端发起操作指令的标准通信格式,遵循 HTTP 协议规则。它是 Web 数据交互的基石,决定了客户端要获取什么资源或执行什么操作。
类比解释
假设你在电商平台下单:
- 你(客户端):提交订单(请求购买商品)
- 订单系统(HTTP 请求):明确商品ID、数量、收货地址(结构化参数)
- 仓库(服务端):解析订单并处理,返回包裹(响应数据)
HTTP 请求如同订单,它用标准格式告诉服务端需要做什么。
2. HTTP 请求的结构
三大部分组成
http
GET /api/products/123 HTTP/1.1 --> 请求行
Host: api.example.com --> 请求头
User-Agent: Mozilla/5.0
Accept: application/json
{ --> 请求体(仅某些方法有)
"name": "New Product"
}
1. 请求行
- 方法:定义操作类型(如 GET、POST)
- 路径:资源地址(如 /api/products)
- 协议版本:HTTP/1.1 或 HTTP/2
2. 请求头
- 传递元数据(Metadata):
- Content-Type:数据格式(如 application/json)
- Authorization:身份认证令牌
- Cache-Control:缓存策略
3. 请求体
- 仅用于 POST、PUT 等方法
- 携带结构化数据(JSON、XML 等)
3. HTTP 请求的工作原理
交互流程
- 客户端构建请求:设置方法、URL、头信息、数据
- 发送到服务端:通过 TCP/IP 协议传输
- 服务端处理:验证权限、执行逻辑、查询数据库
- 返回响应:包含状态码和结果数据
状态码分类
状态码 | 类别 | 示例 |
---|---|---|
2xx | 成功 | 200 OK(请求成功) |
3xx | 重定向 | 301 永久移动 |
4xx | 客户端错误 | 404 资源不存在 |
5xx | 服务端错误 | 500 服务器内部错误 |
4. HTTP 请求的常见类型
核心方法对比
方法 | 用途 | 幂等性 | 安全性 | 请求体支持 |
---|---|---|---|---|
GET | 获取资源 | 是 | 是 | 否 |
POST | 创建资源或提交数据 | 否 | 否 | 是 |
PUT | 更新整个资源 | 是 | 否 | 是 |
DELETE | 删除资源 | 是 | 否 | 否 |
示例场景
- GET:加载商品详情页 http
GET /products/123 HTTP/1.1
- POST:提交用户注册表单 http
POST /s HTTP/1.1 Content-Type: application/json { "name": "John", "email": "john@example.com" }
5. 实际应用与调试工具
开发者工具(浏览器)
- 按 F12 打开控制台 → Network 标签
- 查看请求详情(Headers/Response)
cURL 示例
bash
# GET 请求示例
curl -X GET "https://api.example.com/products/123"
# POST 请求示例
curl -X POST "https://api.example.com/s" \
-H "Content-Type: application/json" \
-d '{"name": "John"}'
6. 安全性与最佳实践
关键原则
- HTTPS:始终使用加密传输(避免 HTTP 明文)
- 请求头安全:
- 设置 Content-Security-Policy 防御 XSS
- 使用 Authorization: Bearer <token> 管理权限
- 数据校验:服务端需验证请求参数合法性
RESTful 设计规范
- URL 路径使用名词复数(如 /api/products)
- 用 HTTP 方法对应 CRUD 操作
7. 常见问题解答(FAQ)
Q1:GET 和 POST 有什么区别?
- GET 参数在 URL 中,有长度限制;POST 数据在请求体中,更安全且支持大数据。
Q2:PUT 和 PATCH 如何选择?
- PUT 替换整个资源,PATCH 仅更新部分字段。
Q3:如何防止重复提交 POST 请求?
- 前端禁用重复点击 + 服务端幂等性设计(如生成唯一请求ID)。
Q4:跨域请求(CORS)问题如何解决?
- 服务端设置响应头 Access-Control-Allow-Origin。