HTTP(超文本传输协议)是万维网数据通信的核心基础,而HTTP报文则是客户端与服务器之间交互信息的载体。掌握HTTP报文格式对开发者理解网络通信、调试API和优化Web性能至关重要。
一、HTTP报文整体结构
所有HTTP报文(无论请求或响应)都由起始行 + 头部字段 + 空行 + 消息主体四部分组成:
[起始行]
[头部字段1]: [值]
[头部字段2]: [值]
...
[空行]
[消息主体](可选)
关键点:每行以回车换行符(\r\n
)结尾,头部和主体之间必须有一个空行(\r\n\r\n
)。
二、HTTP请求报文
客户端发送请求时使用此格式:
GET /api/user?id=123 HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xyz123
Content-Type: text/plain
Content-Length: 18
Hello from client!
核心组件解析
- 请求行 (Request Line)
GET
:HTTP方法(GET/POST/PUT/DELETE等)/api/user?id=123
:资源路径+查询参数HTTP/1.1
:协议版本
- 请求头部 (Headers) - 常见字段:
Host
:目标服务器域名(必须字段)User-Agent
:客户端标识(浏览器/爬虫等)Content-Type
:请求主体类型(如application/json
)Authorization
:身份凭证(如Bearer令牌)Cookie
:会话状态信息
- 消息主体 (Body)
- 通常出现在POST/PUT请求
- 格式由
Content-Type
定义(JSON/表单/二进制等) Content-Length
精确声明主体字节数
三、HTTP响应报文
服务器返回数据时使用此格式:
HTTP/1.1 200 OK
Server: Nginx/1.18
Content-Type: application/json
Content-Length: 42
Cache-Control: max-age=3600
Set-Cookie: session_id=abc; Path=/
{"name": "John", "email": "john@example.com"}
核心组件解析
- 状态行 (Status Line)
HTTP/1.1
:协议版本200
:状态码(例如404表示资源未找到)OK
:状态文本描述
- 响应头部 (Headers) - 常见字段:
Server
:服务器软件信息Content-Type
:响应体类型(如image/png
)Cache-Control
:缓存策略指令Set-Cookie
:向客户端设置CookieLocation
:重定向目标URL(配合302状态码)
- 消息主体 (Body)
- HTML网页、JSON数据、文件等
- 长度由
Content-Length
或分块传输编码(Transfer-Encoding: chunked
)定义
四、头部字段特性
- 大小写不敏感:
content-type
与Content-Type
等效 - 可重复性:如多个
Set-Cookie
可设置多个Cookie - 扩展性:支持自定义头部(如
X-Request-ID
)
五、调试实践建议
- 开发者工具:浏览器Network面板直接查看原始报文
- 命令行工具:用
curl -v URL
输出详细通信过程 - 抓包工具:Wireshark或Fiddler捕获明文HTTP流量
注:HTTPS流量需配置SSL解密才可查看明文内容。