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

张开发
2026/6/3 6:39:39 15 分钟阅读
HTTP 请求包含哪些内容:请求行、请求头、请求体三大结构及类型详解
HTTP 请求包含哪些内容请求行、请求头、请求体三大结构及类型详解01. 前言一个 HTTP 请求的“快递包裹”长什么样02. HTTP 请求的三大组成部分03. 第一部分请求行Request Line3.1 HTTP 方法常用3.2 请求目标Request Target3.3 HTTP 版本04. 第二部分请求头Request Headers4.1 通用头General Headers4.2 请求头Request Headers4.3 实体头Entity Headers描述 body05. 第三部分请求体Request Body5.1 常见 Content-Type 与请求体格式对照表5.2 四种主流格式详解5.2.1 JSONapplication/json5.2.2 表单 URL 编码x-www-form-urlencoded5.2.3 表单多部分multipart/form-data—— 文件上传专用5.2.4 纯文本 / 二进制06. 完整请求示例不同场景对比场景1GET 请求无 body场景2POST JSON 数据场景3POST 文件上传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 请求一般无 body03. 第一部分请求行Request Line请求行由三个字段组成空格分隔方法 空格 请求目标 空格 HTTP版本 GET /index.html HTTP/1.13.1 HTTP 方法常用方法含义是否有请求体幂等性GET获取资源无是POST创建资源有否PUT完整更新资源有是PATCH部分更新资源有否DELETE删除资源可有可无是HEAD获取响应头无 body无是OPTIONS查询支持的方法无是3.2 请求目标Request Target常见形式绝对路径/api/user?id1最常用完整 URLhttps://example.com/api/user通过代理时星号*用于 OPTIONS 方法3.3 HTTP 版本HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.004. 第二部分请求头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;q0.9, en;q0.8首选语言Refererhttps://google.com来源页面注意拼写错误AuthorizationBearer eyJhbGc...认证凭证JWT / BasicCookiesessionIdabc123携带的 CookieIf-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张三age25URL 编码传统表单提交HTML formmultipart/form-data二进制边界分隔包含文件和文本字段文件上传text/plain这是一段纯文本日志、简单文本接口application/xml或text/xmlusername张三/name/user老旧企业接口SOAPapplication/octet-stream原始二进制流任意二进制数据上传5.2 四种主流格式详解5.2.1 JSONapplication/jsonPOST /api/user HTTP/1.1 Content-Type: application/json {username: alice, password: 123456}5.2.2 表单 URL 编码x-www-form-urlencodedPOST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded usernamealicepassword123456remember15.2.3 表单多部分multipart/form-data—— 文件上传专用POST /upload HTTP/1.1 Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; nameusername alice ------WebKitFormBoundaryABC123 Content-Disposition: form-data; nameavatar; filenamephoto.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 broke06. 完整请求示例不同场景对比场景1GET 请求无 bodyGET /api/users?page1size10 HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 Accept: application/json Authorization: Bearer token123场景2POST JSON 数据POST /api/user HTTP/1.1 Host: api.example.com Content-Type: application/json Content-Length: 42 {email:testexample.com,role:admin}场景3POST 文件上传POST /upload HTTP/1.1 Host: upload.example.com Content-Type: multipart/form-data; boundary---123 ---123 Content-Disposition: form-data; namefile; filenamea.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而非multipartJSON 解析报错请求体里有多余逗号、引号不匹配中文乱码缺少字符集声明应加; charsetutf-8GET 请求带 body部分服务器忽略不规范建议只用 POST/PUT 传 body09. 快速记忆表组成部分作用是否必须示例请求行方法 URL 版本是GET /api/user HTTP/1.1请求头元数据格式/认证/缓存是Content-Type: application/json空行分隔头与体是\r\n\r\n请求体实际数据否{name:张三}10. 总结一个 HTTP 请求就是请求行说清楚“做什么”请求头交代“用什么格式、带什么凭证”请求体放“实际数据”面试常考Content-Type的几种常见值及区别GET 与 POST 在请求体上的差异multipart/form-data与x-www-form-urlencoded的区别掌握这些就能看懂浏览器开发者工具里的大部分网络请求也能写出正确的 API 调用代码。The End点点关注收藏不迷路

更多文章