HTTP报文是客户端与服务器之间通信的基本单位,分为请求报文和响应报文两种类型。其核心结构由三部分组成:起始行(或状态行)、头部字段和消息正文(可选)。以下是具体内容解析:
一、请求报文(Request Message)
请求报文由客户端发送至服务器,用于请求资源或执行操作。其结构如下:
1. 请求行(Request Line)
- 组成:
方法(Method) + 请求目标(URI) + HTTP版本
-
- 方法:如
GET
(获取资源)、POST
(提交数据)、PUT
(更新资源)、DELETE
(删除资源)等。 - 请求目标:资源的路径(如
/index.html
)或完整URL(代理场景)。 - HTTP版本:如
HTTP/1.1
或HTTP/2
。
- 方法:如
- 示例:
GET /api/users HTTP/1.1
2. 请求头部字段(Headers)
- 作用:传递附加信息,如客户端类型、认证信息、内容类型等。
- 常见字段:
-
Host
:目标服务器域名(HTTP/1.1必需)。User-Agent
:客户端标识(如浏览器类型)。Accept
:客户端可接受的响应类型(如text/html
)。Content-Type
:请求体数据类型(如application/json
)。Authorization
:认证信息(如Bearer token
)。
- 其他通用字段:如
Connection
(连接管理)、Cache-Control
(缓存策略)。
3. 请求体(Body,可选)
- 存在条件:仅在
POST
、PUT
等方法中使用。 - 数据格式:如表单数据(
application/x-www-form-urlencoded
)、JSON(application/json
)等。 - 示例:
username=admin&password=123456
二、响应报文(Response Message)
响应报文由服务器返回给客户端,用于反馈请求处理结果。其结构如下:
1. 状态行(Status Line)
- 组成:
HTTP版本 + 状态码 + 原因短语
-
- 状态码:3位数字,表示处理结果(如
200
成功、404
未找到)。
- 状态码:3位数字,表示处理结果(如
-
-
- 分类:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。
-
-
- 原因短语:状态码的文字描述(如
OK
、Not Found
)。
- 原因短语:状态码的文字描述(如
- 示例:
HTTP/1.1 200 OK
2. 响应头部字段(Headers)
- 作用:描述响应的元信息,如内容类型、缓存策略等。
- 常见字段:
-
Server
:服务器软件信息(如Apache/2.4.1
)。Content-Type
:响应体类型(如text/html
)。Content-Length
:响应体字节数。Set-Cookie
:设置客户端Cookie。
- 其他通用字段:如
Date
(响应时间)、Cache-Control
(缓存控制)。
3. 响应体(Body,可选)
- 内容:实际返回的数据,如HTML页面、JSON、图片等。
- 示例:
<html><body>Hello World</body></html>
三、通用结构与高级特性
- 空行分隔:头部与正文之间必须有一个空行(
\r\n
)。 - 分块传输编码:通过
Transfer-Encoding: chunked
分割大文件传输。 - 持久连接:HTTP/1.1 默认启用
Connection: keep-alive
,复用TCP连接。 - 内容协商:通过
Accept
、Accept-Language
等字段协商资源格式。
四、完整示例
请求报文示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
响应报文示例:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>Hello World</html>