HTTP请求报文结构
HTTP请求报文由三部分组成:
- 请求行(Request Line)
- 请求头(Request Header)
- 请求体(Request Body)
1. 请求行
请求行包含三个重要信息:
- 请求方法(GET、POST、PUT等)
- 请求URL
- HTTP协议版本
示例:
|
|
这个请求行表示:
- 使用GET方法获取资源
- 请求的资源路径是/index.html
- 使用的是HTTP/1.1版本协议
2. 常见请求头字段
字段名 | 说明 |
---|---|
Host | 请求的服务器域名 |
User-Agent | 客户端信息 |
Accept | 客户端可接受的响应内容类型 |
Accept-Language | 客户端可接受的语言 |
Accept-Encoding | 客户端可接受的内容编码 |
Connection | 连接管理,如keep-alive |
Cookie | 客户端存储的Cookie信息 |
Content-Type | 请求体的MIME类型 |
Content-Length | 请求体的长度 |
3. 请求体
请求体包含发送给服务器的数据,常见于POST请求。数据格式可以是:
1) application/x-www-form-urlencoded
- 最常见的POST提交数据方式
- 格式:
key1=value1&key2=value2
- 特点:
- 数据会被URL编码(空格转换为+,特殊字符转换为ASCII HEX值)
- 适合简单的文本数据提交
- 示例:
|
|
这个示例表示:
- 提交了三个字段:username、password和age
- 数据以键值对形式传输
- 使用&符号分隔不同的字段
- 所有数据都经过URL编码
2) application/json
- 现代API中最流行的数据格式
- 数据以JSON格式传输
- 特点:
- 支持复杂的数据结构(嵌套对象、数组等)
- 可读性好
- 数据类型丰富
- 示例:
|
|
这个示例展示了JSON格式的优势:
- 可以表示嵌套的数据结构(address是一个对象)
- 支持数组类型(hobbies是一个数组)
- 支持多种数据类型(字符串、数字)
- 层次结构清晰,易于阅读和解析
3) multipart/form-data
- 主要用于文件上传场景
- 特点:
- 可以同时上传文件和文本数据
- 每个表单项都有独立的边界字符串分隔
- 支持二进制文件传输
- 示例:
|
|
这个示例说明:
- 使用特定的边界字符串分隔不同的表单项
- 可以同时上传文本(username)和文件(photo)
- 每个部分都有自己的Content-Disposition说明
- 文件上传部分包含文件名和文件类型信息
HTTP响应报文结构
HTTP响应报文也由三部分组成:
- 状态行(Status Line)
- 响应头(Response Header)
- 响应体(Response Body)
1. 状态行
状态行包含:
- HTTP协议版本
- 状态码
- 状态描述
示例:
|
|
这个状态行表示:
- 使用HTTP/1.1版本协议
- 状态码是200,表示请求成功
- OK是对状态码的文字描述
2. 常见状态码
状态码 | 类别 | 说明 |
---|---|---|
1xx | 信息性状态码 | 请求已接收,继续处理 |
2xx | 成功状态码 | 请求已成功接收、理解、接受 |
3xx | 重定向状态码 | 需要进一步操作以完成请求 |
4xx | 客户端错误状态码 | 请求包含语法错误或无法完成请求 |
5xx | 服务器错误状态码 | 服务器在处理请求时发生错误 |
常见状态码:
- 200 OK:请求成功
- 301 Moved Permanently:永久重定向
- 302 Found:临时重定向
- 400 Bad Request:客户端请求语法错误
- 401 Unauthorized:请求需要用户认证
- 403 Forbidden:服务器拒绝请求
- 404 Not Found:请求的资源不存在
- 500 Internal Server Error:服务器内部错误
- 503 Service Unavailable:服务器暂时无法处理请求
3. 常见响应头字段
字段名 | 说明 |
---|---|
Server | 服务器软件信息 |
Content-Type | 响应体的MIME类型 |
Content-Length | 响应体的长度 |
Content-Encoding | 响应体的编码方式 |
Cache-Control | 缓存控制 |
Set-Cookie | 设置Cookie |
Location | 重定向的目标URL |
Access-Control-Allow-Origin | CORS跨域允许的来源 |
完整示例
GET请求示例
|
|
这个GET请求示例说明:
- 使用GET方法请求/api/users接口
- 请求发送到api.example.com服务器
- 使用Mozilla/5.0浏览器发送请求
- 期望接收JSON格式的响应
POST请求示例
|
|
这个POST请求示例说明:
- 使用POST方法向/api/users接口提交数据
- 发送JSON格式的数据
- 请求体包含用户名和邮箱信息
- Content-Length指明了请求体的长度
响应示例
|
|
这个响应示例说明:
- 请求处理成功(状态码200)
- 返回JSON格式的数据
- 响应体包含状态信息和用户数据
- 服务器成功创建了用户并返回了用户ID
multipart/form-data示例(文件上传)
|
|
application/x-www-form-urlencoded示例
|
|
带Cookie的请求示例
|
|
重定向响应示例
|
|