蓝易云cdn:HTTP的请求方法,body,介绍请求报头
HTTP请求报文结构详解:方法、报头、空行与Body 📡
每一次浏览器访问网页、APP调用接口,背后都是一次HTTP请求在工作。理解HTTP请求报文的组成结构,是网络编程和Web开发的基本功。一个完整的HTTP请求报文由四部分组成:请求行、请求报头、空行、请求体(Body)。下面逐一拆解。

一、请求行:报文的第一行 🏷️
请求行是HTTP报文的起始行,包含三个要素:请求方法、请求路径、协议版本。
GET /api/user?id=1 HTTP/1.1
解释:GET 是请求方法,表示要获取资源;/api/user?id=1 是请求的目标路径,包括查询参数;HTTP/1.1 是所使用的协议版本。这三者之间用空格分隔,行末以回车换行符(\r\n)结束。服务器拿到这一行,就知道客户端想对哪个资源做什么操作。
二、HTTP请求方法详解 🔧
HTTP协议定义了多种请求方法,每种方法代表对资源的不同操作语义:
| 方法 | 用途 | 是否携带Body |
|---|---|---|
| GET | 获取资源,最常用的方法 | 一般不携带 |
| POST | 提交数据,常用于表单提交、创建资源 | 携带 |
| PUT | 整体替换目标资源 | 携带 |
| DELETE | 删除指定资源 | 一般不携带 |
| PATCH | 局部修改资源 | 携带 |
| HEAD | 与GET相同但只返回响应头,不返回Body | 不携带 |
| OPTIONS | 查询服务器支持哪些方法(常见于CORS预检) | 不携带 |
实际开发中用得最多的是GET和POST。两者的核心区别在于:GET通过URL传参,参数暴露在地址栏中,有长度限制;POST通过请求体传参,适合传输大量数据或敏感信息 🎯。
举个POST请求的完整示例:
POST /api/login HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 42
{"username":"admin","password":"123456"}
解释: 第一行是请求行,声明使用POST方法访问登录接口。中间若干行是请求报头,提供附加信息。空行之后是请求体,承载着JSON格式的登录数据。这四部分共同构成了一个完整的HTTP请求报文。
三、请求报头(Request Headers)📋
请求报头紧跟在请求行之后,每行一个键值对,格式为 字段名: 字段值。报头的作用是向服务器传递请求的附加信息和控制参数。
常见核心报头字段:
Host
Host: www.example.com
解释: 指定请求的目标主机名和端口号。这是HTTP/1.1中唯一一个强制必须携带的报头。在同一台服务器部署多个站点时(虚拟主机),服务器依靠Host字段来区分请求应路由到哪个站点。
Content-Type
Content-Type: application/json; charset=UTF-8
解释: 告知服务器请求体中数据的格式类型。application/json 表示JSON格式,application/x-www-form-urlencoded 表示表单编码格式,multipart/form-data 用于文件上传。服务器据此选择正确的解析方式,如果Content-Type与实际数据不匹配,解析就会失败 ⚠️。
Content-Length
Content-Length: 42
解释: 声明请求体的字节长度。服务器根据这个值来判断请求体是否接收完整。如果实际数据比声明的长度短,服务器会一直等待剩余数据;如果比声明的长,多余部分会被截断或引发错误。
Accept
Accept: application/json, text/html;q=0.9
解释: 告诉服务器客户端希望接收什么格式的响应数据。q=0.9 是权重值,表示优先级。服务器会根据这个字段进行内容协商,尽量返回客户端偏好的数据格式。
User-Agent
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
解释: 标识客户端的类型和版本信息,包括浏览器类型、操作系统等。服务器可以据此做兼容性处理,比如对移动端和桌面端返回不同的页面布局。
Cookie
Cookie: session_id=abc123; theme=dark
解释: 将客户端保存的Cookie信息随请求发送给服务器。这是HTTP维持会话状态的主要机制。服务器通过Cookie中的会话标识来识别用户身份,实现登录保持等功能 🍪。
Authorization
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
解释: 携带身份认证凭证。Bearer 方案常用于JWT令牌认证,服务器解析令牌来验证请求者身份和权限。与Cookie不同,这种方式更适合无状态的API认证场景。
四、空行的作用 ↩️
报头和请求体之间必须有一个空行(即单独的 \r\n),这是HTTP协议的硬性规定。
Content-Type: application/json\r\n
\r\n ← 这就是空行
{"username":"admin"}
解释: 空行是报头结束的标志。HTTP报文是纯文本流,服务器在解析时从上往下逐行读取报头,当遇到一个空行时,就知道报头部分到此结束,后面的内容全部属于请求体。如果缺少这个空行,服务器将无法正确分割报头和Body,导致整个请求解析失败。虽然它看起来不起眼,但在协议层面是绝对不可省略的分隔符 🧱。
五、请求体(Body)📦
请求体位于空行之后,承载着客户端要提交给服务器的实际数据。并非所有请求都有Body——GET和HEAD通常没有,POST、PUT、PATCH通常有。
常见的三种Body格式:
JSON格式(接口开发最常用)
{"name":"张三","age":25}
表单格式(传统HTML表单提交)
name=%E5%BC%A0%E4%B8%89&age=25
文件上传格式(multipart分段传输)