当前位置: 首页 > news >正文

HTTP 请求包含哪些内容:请求行、请求头、请求体三大结构及类型详解

HTTP 请求包含哪些内容:请求行、请求头、请求体三大结构及类型详解

    • 01. 前言:一个 HTTP 请求的“快递包裹”长什么样?
    • 02. HTTP 请求的三大组成部分
    • 03. 第一部分:请求行(Request Line)
      • 3.1 HTTP 方法(常用)
      • 3.2 请求目标(Request Target)
      • 3.3 HTTP 版本
    • 04. 第二部分:请求头(Request Headers)
      • 4.1 通用头(General Headers)
      • 4.2 请求头(Request Headers)
      • 4.3 实体头(Entity Headers,描述 body)
    • 05. 第三部分:请求体(Request Body)
      • 5.1 常见 Content-Type 与请求体格式对照表
      • 5.2 四种主流格式详解
        • 5.2.1 JSON(application/json)
        • 5.2.2 表单 URL 编码(x-www-form-urlencoded)
        • 5.2.3 表单多部分(multipart/form-data)—— 文件上传专用
        • 5.2.4 纯文本 / 二进制
    • 06. 完整请求示例:不同场景对比
      • 场景1:GET 请求(无 body)
      • 场景2:POST JSON 数据
      • 场景3:POST 文件上传
    • 07. 请求解析流程图(客户端发送 → 服务器解析)
    • 08. 常见错误与注意事项
    • 09. 快速记忆表
    • 10. 总结

🌺The Begin🌺点点关注,收藏不迷路🌺

01. 前言:一个 HTTP 请求的“快递包裹”长什么样?

当你用浏览器访问网页或调用 API 时,发出的每个 HTTP 请求就像一封格式严格的快递包裹。这个包裹里有三样东西:

  • 请求行:快递单(告诉服务器“我要干什么”)
  • 请求头:物流标签(告诉服务器“我的设备、接受什么格式、带什么凭证”)
  • 请求体:包裹里的货物(POST/PUT 时携带的实际数据)

理解 HTTP 请求的完整结构,是调试接口、爬虫开发、前后端联调的必备基础。


02. HTTP 请求的三大组成部分

HTTP 请求完整结构 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ POST /api/user HTTP/1.1 ← 请求行 Host: example.com Content-Type: application/json Content-Length: 56 Authorization: Bearer xyz123 ← 请求头 User-Agent: Mozilla/5.0 Accept: application/json ← 空行(分隔符) { "name": "张三", ← 请求体 "age": 25 } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

关键规则

  • 请求行以CRLF(\r\n)结束
  • 每个请求头一行,也是CRLF结束
  • 一个空行(\r\n\r\n)分隔请求头和请求体
  • 请求体可选(GET 请求一般无 body)

03. 第一部分:请求行(Request Line)

请求行由三个字段组成,空格分隔:

方法 + 空格 + 请求目标 + 空格 + HTTP版本 GET /index.html HTTP/1.1

3.1 HTTP 方法(常用)

方法含义是否有请求体幂等性
GET获取资源
POST创建资源
PUT完整更新资源
PATCH部分更新资源
DELETE删除资源可有可无
HEAD获取响应头(无 body)
OPTIONS查询支持的方法

3.2 请求目标(Request Target)

常见形式:

  • 绝对路径/api/user?id=1(最常用)
  • 完整 URLhttps://example.com/api/user(通过代理时)
  • 星号*(用于 OPTIONS 方法)

3.3 HTTP 版本

  • HTTP/1.0HTTP/1.1HTTP/2.0HTTP/3.0

04. 第二部分:请求头(Request Headers)

请求头是键值对(Key: Value),用于传递附加信息。下面按功能分类。

4.1 通用头(General Headers)

头字段示例值说明
Hostexample.com:8080必填,指定服务器域名+端口
User-AgentMozilla/5.0 ...客户端身份(浏览器/爬虫)
Connectionkeep-alive/close连接管理

4.2 请求头(Request Headers)

头字段示例值说明
Acceptapplication/json, text/plain客户端期望的响应格式
Accept-Encodinggzip, deflate, br支持的压缩算法
Accept-Languagezh-CN, zh;q=0.9, en;q=0.8首选语言
Refererhttps://google.com来源页面(注意拼写错误)
AuthorizationBearer eyJhbGc...认证凭证(JWT / Basic)
CookiesessionId=abc123携带的 Cookie
If-Modified-SinceWed, 21 Oct 2015 07:28:00 GMT缓存验证

4.3 实体头(Entity Headers,描述 body)

头字段示例值说明
Content-Typeapplication/json请求体的格式(重要)
Content-Length348请求体字节数
Content-Encodinggzip请求体是否压缩

05. 第三部分:请求体(Request Body)

请求体只在 POST、PUT、PATCH 等方法中出现,GET/DELETE 一般无 body。

5.1 常见 Content-Type 与请求体格式对照表

Content-Type请求体格式示例使用场景
application/json{"name":"张三","age":25}RESTful API(最主流)
application/x-www-form-urlencodedname=张三&age=25(URL 编码)传统表单提交(HTML form)
multipart/form-data二进制边界分隔,包含文件和文本字段文件上传
text/plain这是一段纯文本日志、简单文本接口
application/xmltext/xml<user><name>张三</name></user>老旧企业接口(SOAP)
application/octet-stream原始二进制流任意二进制数据上传

5.2 四种主流格式详解

5.2.1 JSON(application/json)
POST /api/user HTTP/1.1 Content-Type: application/json {"username": "alice", "password": "123456"}
5.2.2 表单 URL 编码(x-www-form-urlencoded)
POST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=alice&password=123456&remember=1
5.2.3 表单多部分(multipart/form-data)—— 文件上传专用
POST /upload HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="username" alice ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="avatar"; filename="photo.jpg" Content-Type: image/jpeg (二进制图片数据) ------WebKitFormBoundaryABC123--
5.2.4 纯文本 / 二进制
POST /log HTTP/1.1 Content-Type: text/plain 2025-01-15 10:00:00 ERROR Something broke

06. 完整请求示例:不同场景对比

场景1:GET 请求(无 body)

GET /api/users?page=1&size=10 HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 Accept: application/json Authorization: Bearer token123

场景2:POST JSON 数据

POST /api/user HTTP/1.1 Host: api.example.com Content-Type: application/json Content-Length: 42 {"email":"test@example.com","role":"admin"}

场景3:POST 文件上传

POST /upload HTTP/1.1 Host: upload.example.com Content-Type: multipart/form-data; boundary=---123 ---123 Content-Disposition: form-data; name="file"; filename="a.txt" hello world ---123--

07. 请求解析流程图(客户端发送 → 服务器解析)

客户端准备请求 │ ▼ ┌─────────────────────────────────────────┐ │ 1. 构造请求行(方法 + URL + 版本) │ │ 2. 填充请求头(Host、Content-Type 等) │ │ 3. 如果有 body → 序列化并计算长度 │ └─────────────────────────────────────────┘ │ ▼ 发送原始 HTTP 文本/二进制 │ ▼ 服务器接收并解析 │ ├── 解析请求行 → 路由匹配 ├── 解析请求头 → 放入上下文(Headers 对象) ├── 遇到空行 → 停止解析头部 └── 根据 Content-Type 解析请求体 │ ├── application/json → JSON 反序列化 ├── x-www-form-urlencoded → 解析键值对 ├── multipart/form-data → 解析文件+字段 └── 其他 → 原始数据 │ ▼ 业务逻辑处理

08. 常见错误与注意事项

错误现象原因分析
后端收不到 POST 参数忘记设置Content-Type或前后端格式不匹配
文件上传失败使用了x-www-form-urlencoded而非multipart
JSON 解析报错请求体里有多余逗号、引号不匹配
中文乱码缺少字符集声明,应加; charset=utf-8
GET 请求带 body(部分服务器忽略)不规范,建议只用 POST/PUT 传 body

09. 快速记忆表

组成部分作用是否必须示例
请求行方法 + URL + 版本GET /api/user HTTP/1.1
请求头元数据(格式/认证/缓存)Content-Type: application/json
空行分隔头与体\r\n\r\n
请求体实际数据{"name":"张三"}

10. 总结

一个 HTTP 请求就是:

  • 请求行:说清楚“做什么”
  • 请求头:交代“用什么格式、带什么凭证”
  • 请求体:放“实际数据”

面试常考:

  • Content-Type的几种常见值及区别
  • GET 与 POST 在请求体上的差异
  • multipart/form-datax-www-form-urlencoded的区别

掌握这些,就能看懂浏览器开发者工具里的大部分网络请求,也能写出正确的 API 调用代码。



🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/593996/

相关文章:

  • Doris查询优化指南:PHP开发者必知的5个参数调优技巧
  • 文章标题:专业ASIC FPGA IP加密代码解密工具
  • 快至1天开通企业来电名片!高性价比号码认证服务商推荐(适配中小企业) - 企业服务推荐
  • 从Logistic曲线到疫情预测:用Python和SciPy复现SI传染病模型(附代码)
  • 连登IEEE/Elsevier一区TOP刊!PINN+强化学习新突破!
  • HTTP 2.0 与 HTTP 3.0 核心区别详解:从 TCP 到 UDP,彻底解决队头阻塞
  • **基于ARKit的增强现实手势交互开发实战:从零构建沉浸式用户界面**
  • UG NX 合并曲面减少面得数量
  • HTTP 和 HTTPS 有什么区别:从明文传输到安全加密的完整演进
  • ollama环境变量全解析:从数据路径到端口优化的高效配置指南
  • 第25课:让 Qt 从 GPIO 子系统一路进阶到平台驱动与设备树控制
  • 智能电池充电:使用PID控制器优化SOC附Matlab代码
  • 保姆级教程:用MS-Swift在本地电脑上跑通Qwen2.5-VL多模态大模型(附WebUI界面)
  • **Rollup方案实战:基于Vite的模块化构建优化与性能提升**在现代前端工程化实践中,**构建
  • 实测对比:美信POC方案中磁珠选型的5个关键陷阱(附PSpice仿真文件)
  • AI 驱动的代码理解神器:DeepWiki 让代码库秒变交互式 Wiki
  • 【GitHub开源项目专栏】黑客松获奖项目技术深潜:从垂直领域AI到安全基础设施的创新实践
  • 51单片机(一) --- 入门
  • 国产DSP
  • DJI Windows SDK避坑指南:从环境配置到示例程序运行的完整流程(VS2019实测)
  • c.语言完美演绎6-22
  • 字节跳动开源Coze后,个人开发者如何快速上手?保姆级教程来了
  • HTTP 中 GET 和 POST 的区别是什么:从语义到安全、从参数到缓存
  • 雷达目标分类及宽带测角方案设计实现
  • JavaScript高频八股
  • MapboxGL离线部署实战:自定义字体与本地化渲染方案
  • 【算法学习专栏】动态规划基础·简单三题精讲(70.爬楼梯、118.杨辉三角、121.买卖股票的最佳时机)
  • 08_微服务划分与团队人数之监控治理与跨团队协作
  • 分布式微电网能源交易算法matlab源代码, 代码按照高水平文章复现,保证正确 孤岛微电网之间...
  • 在Ubuntu 22.04上搞定SRILM 1.7.3:从下载到`make test`成功的保姆级记录