HTTP请求组成 & 请求头、请求体(面试Markdown)
一次完整HTTP请求报文分为4部分:请求行、请求头、空行、请求体
1. 请求行
格式:请求方法 资源路径 HTTP版本
示例:POST /api/user HTTP/1.1
- 请求方法:GET、POST、PUT、DELETE、PATCH等
- URL路径:访问的资源地址
- HTTP版本:HTTP/1.1、HTTP/2、HTTP/3
2. 请求头(Request‑Header)
键值对形式,补充请求元信息,和业务数据无关,描述请求本身。
高频常见请求头
Host:请求的目标主机域名/端口,1.1强制必须带User‑Agent:客户端标识,浏览器、设备、客户端版本Content‑Type:最重要,告诉服务器请求体是什么数据格式Accept:客户端能接收服务端返回什么类型响应数据Accept‑Encoding:支持的压缩格式(gzip)Accept‑Language:语言Connection:keep‑alive保持长连接 / close关闭连接Cookie:携带cookie信息Authorization:身份认证token、Bearer令牌Referer:来源页面地址If‑Modified‑Since / If‑None‑Match:缓存协商相关头
3. 空行
分隔请求头和请求体,固定\r\n,必不可少。
4. 请求体(Request Body)
存放业务提交的数据。
⚠️ GET请求没有请求体,虽然语法可以写,但规范不建议,参数放URL查询参数。POST/PUT/PATCH才会使用请求体。
请求体常见Content‑Type类型(面试重点)
1. application/x‑www‑form‑urlencoded
- 默认表单格式
- 数据格式:
name=zhangsan&age=20key=value&拼接 - 特点:普通form表单不设置enctype默认就是这个;不适合传二进制文件;中文会url编码。
2. multipart/form‑data
- 用于文件上传
- 会用随机boundary字符串做分隔符,分割多个字段,可以同时传普通参数+二进制文件。
- 文件上传接口必须用这个类型。
3. application/json(后端最常用)
- JSON字符串格式:
{"name":"zhangsan","age":20} - Restful接口主流格式,支持复杂嵌套对象。
4. text/xml
xml格式数据,现在互联网项目很少使用,老系统、第三方对接偶尔见到。
小结三个最常考:
x‑www‑form‑urlencoded:普通表单键值对multipart/form‑data:文件上传application/json:json rest接口
面试口述版本
HTTP请求报文分为四部分:请求行、请求头、空行、请求体。
请求行包含请求方法、访问路径、HTTP版本。
请求头是一堆键值对,描述请求的附加信息,比如Host、User‑Agent、Authorization、Cookie,最重要的是Content‑Type,用来标识请求体的数据格式。
空行用来分隔请求头和请求体。
请求体存放业务数据,GET一般没有请求体,POST/PUT使用。请求体常见三种类型:
application/x‑www‑form‑urlencoded是普通表单,key&value格式;
multipart/form‑data用于文件上传;
application/json是现在前后端分离最常用的JSON格式。